def foo(bar, baz=[]):
baz.append(bar)
print baz
foo(1)
foo(2)
輸出結(jié)果為
[1]
[1,2]
原因是,當(dāng)解釋器執(zhí)行def的時(shí)候砂蔽,默認(rèn)參數(shù)會(huì)被計(jì)算并存在函數(shù)對象的.func_defaults屬性中管搪。這個(gè)對象在所有的函數(shù)調(diào)用中共享。
我們可以測試一下
def foo(bar, baz=[]):
baz.append(bar)
print baz
print foo.func_defaults # ([],)
foo(1)
print foo.func_defaults # ([1],)