我是一个 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]
但是为什么?这要怎么解释。我们知道默认值仅被评估once
,当我们调用 f(2) 时,L 不是 None 并且if
(在第 2 行)不能为真,所以 L.append(a) == [1, 2]。我是否可以猜测由于某种原因再次评估默认值,但什么是“某种原因”,只是因为 python 解释器看到if L is None: L = []