python函数定义时生成一个函数对象,参数都是对象的属性。
所以如果参数的默认值是函数的话,会执行一遍函数结果赋给参数。
之后调用函数使用的都是相同的默认值,相同的,相同的。即便你默认参数返回结果是不同的!

举个栗子:

>>> from datetime import datetime
>>> def func(now=datetime.now()):
...     print now.strftime('%H:%M:%S')
... 

这样每次调用func()都能够输出当前时间了?naive!每次都一样。

>>> func()
23:52:31
>>> func()
23:52:31
>>> func()
23:52:31
>>> func()
23:52:31

算是个坑,记录一下。只好改为

def func(now=None):  
     if not now:   
          now = datetime.now()