例1:
def fun(when = time.time()): print(when) fun() time.sleep(2) fun()
两次调用fun函数,应该相差两秒才对,但实际得到的结果是一样的。如下面所示:
1512026249.7497542 1512026249.7497542
例2:
def fun(a, lt = []): lt.append(a) print(lt) fun(0) fun(1)两次调用fun函数,结果为:
[0] [0, 1]
注意,第二个结果不是[1]。
当解释器执行def的时候, 默认参数也会被计算, 并存在函数的.func_defaults属性中。 由于Python中函数参数传递的是对象, 可变对象在调用者和被调用者之间共 享,再次执行函数时,默认参数不会重新计算,而是继续使用上一次调用后得到的默认参数值。注意,可变对象才会发生这种情况。
修改:when=time.time; lt=None