以下是教程中的例外.
默认值仅计算一次.当默认值是可变对象(例如列表,字典或大多数类的实例)时,这会有所不同.例如,以下函数累积在后续调用中传递给它的参数:
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
这将打印
[1]
[1, 2]
[1, 2, 3]
但是,当我尝试使用标量变量时:
>>> def acu(n, a = 0):
"Test if local variables in functions have static duration"
a = a + n
return a
>>> acu (5)
5
>>> acu (5)
5
那么,为什么L和a的寿命之间存在这种差异?
解决方法:
没有区别.在第二部分中,您将重新绑定本地名称a,而不是对其指向的对象进行变异.