今天我探索了 Python 的一个奇怪的行为。一个例子:
closures = []
for x in [1, 2, 3]:
# store `x' in a "new" local variable
var = x
# store a closure which returns the value of `var'
closures.append(lambda: var)
for c in closures:
print(c())
上面的代码打印
3
3
3
但我希望它打印
1
2
3
我为自己解释了这种行为,var
它始终是相同的局部变量(并且 python 不会像其他语言那样创建一个新变量)。如何修复上述代码,以便每个闭包返回另一个值?