【发布时间】:2011-08-04 08:59:48
【问题描述】:
可能重复:
“Least Astonishment” in Python: The Mutable Default Argument
考虑以下函数:
def foo(L = []):
L.append(1)
print L
每次我调用 foo 时,它都会打印一个新列表,其中包含比上次更多的元素,例如:
>>> foo()
[1]
>>> foo()
[1, 1]
>>> foo()
[1, 1, 1]
现在考虑以下函数:
def goo(a = 0):
a += 1
print a
多次调用,得到如下图:
>>> goo()
1
>>> goo()
1
>>> goo()
1
即它不会在每次调用时打印更大的值。
这种看似不一致的行为背后的原因是什么?
另外,如何证明第一个示例中的反直觉行为是合理的,为什么函数在调用之间保持状态?
【问题讨论】:
-
以及同一问题的许多其他答案。
-
为什么我们会突然无数次地收到这个问题?
标签: python function default-arguments