python中的可变参数需要注意,这个问题看起来虽小,但是当其出现,就可能压根不知道问题到底出现在哪里,为此而揪心费脑的花去几天的时间也是极有可能的。
例如:
def f(x=[]):
x.append(1)
print(x)
f()
f()
f()
你以为的结果可能是,
[1]
[1]
[1]
而实际的结果是
[1]
[1, 1]
[1, 1, 1]
究其原因,是函数也是对象,默认参数是函数的一个属性。在上例中,函数对象中的属性x,随着f()没有传入参数的调用,而在发生改变。
取而代之的是你应该使用一个标记值表示“没有指定”来替换可变对象,如:
>>> def foo(x=None):
... if x is None:
... x = []
... x.append(1)
... print x
>>> foo()
[1]
>>> foo()
[1]