函数参数的默认值只计算一次。当参数是可变对象时(列表,字典,集合,对象等),函数执行的结果和想象的可能不一样。例如下面的例子:
def f(a, L=[]):
L.append(a)
return id(L), L
print(f(1))
print(f(2))
print(f(3))
执行结果:
(140024382880392, [1])
(140024382880392, [1, 2])
(140024382880392, [1, 2, 3])
这是因为参数L在第一次调用f的时候被创建,之后每次调用f函数,都是使用同一个参数对象。
如果你不希望每次调用函数时,共享默认值,你可以将函数修改成如下方式:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return id(L), L
执行结果
(140024382877256, [1])
(140024382877256, [2])
(140024382877256, [3])













网友评论