以下python代码:
def test_function(a = []):
a.append('x')
print(a)
test_function()
test_function()
打印:
['x']
['x', 'x']
似乎a=[]
默认赋值仅使用一次,之后a
被视为函数的属性,除非在再次调用函数时重新赋值(例如test_function(a=['hello'])
})。这种行为在Python2.x和3.x之间共享,因此我认为它不被视为设计缺陷。
我想知道:
答案 0 :(得分:1)
默认值是一个表达式,在定义/编译函数时为evaluated only once。它可能存储在函数对象的某个位置,因此当此表达式求值为像列表这样的可变对象时,您将获得所描述的效果。我不知道这个的理性,但它是python的一个特性。
In [11]: def f(x = [], y = 123):
...: pass
In [12]: f.func_defaults
Out[12]: ([], 123)