以下是教程的异常(exception)情况。
默认值仅计算一次。当默认值是可变对象(例如列表、字典或大多数类的实例)时,这会有所不同。例如,以下函数在后续调用中累积传递给它的参数:
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 的生命周期存在差异?
最佳答案
没有区别。在第二部分中,您将重新绑定(bind)本地名称 a
,而不是改变它指向的对象。
关于python - 复合类型和标量类型的生命周期有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16710584/