范围是您所期望的。
可能令人惊讶的是,默认值仅计算一次并重新使用,因此每次调用该函数时,您将获得相同的列表,而不是初始化为[]的新列表。
该列表存储在中f.func_defaults
。
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
print f.func_defaults
f.func_defaults = (['foo'],) # Don't do this!
print f(4)
结果:
[1]
[1, 2]
[1, 2, 3]
([1, 2, 3],)
['foo', 4]