【发布时间】:2012-07-07 03:48:40
【问题描述】:
今天我探索了 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 不会像其他语言那样创建一个新变量)。如何修复上面的代码,让每个闭包都返回另一个值?
【问题讨论】:
-
提示:什么在 Python 中引入了新的变量作用域?
-
刚刚看到stackoverflow.com/questions/7546285/… 是一个重复的问题。我该如何关闭这个或者我应该删除它?
-
@tampis:投票结束吧——版主最终会决定这个问题是合并还是删除。
-
实际上,我认为这甚至不会像您认为的那样。尝试在第一个循环之后添加
del var。 -
@cha0site
del var给出异常lobal name 'var' is not defined
标签: python variables for-loop parameters closures