参见英文答案 >
“Least Astonishment” and the Mutable Default Argument 29个
我是一个python初学者,读“python教程”,它说如果我们有一个功能:
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
这将打印
[1]
[1, 2]
[1, 2, 3]
因为默认值只计算一次,而list是可变对象.我可以理解
它说继续,如果我们不希望在次要电话之间共享默认值,我们可以:
def f(a, L=None):
if L is None: #line 2
L = []
L.append(a)
return L
print f(1)
print f(2)
print f(3)
这将输出:
[1]
[2]
[3]
但为什么?怎么解释这个我们知道默认值只计算一次,当我们调用f(2)时,L不是None,如果(在第2行)不成立,那么L.append(a)== [1,2].我可以猜测,由于某些原因,默认值被再次评估,但是什么是“某些原因”,只是因为python解释器看到L是否为无:L = []