警惕python中的默认参数

2016-09-22  本文已影响11人  bigtom
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],)
上一篇下一篇

猜你喜欢

热点阅读