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],)