def foo(bar, baz=[]):
baz.append(bar)
print baz
foo(1)
foo(2)
输出结果为
[1]
[1,2]
原因是,当解释器执行def的时候,默认参数会被计算并存在函数对象的.func_defaults属性中。这个对象在所有的函数调用中共享。
我们可以测试一下
def foo(bar, baz=[]):
baz.append(bar)
print baz
print foo.func_defaults # ([],)
foo(1)
print foo.func_defaults # ([1],)