今天我探索的Python 怪异行为。举个例子:如何强制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中引入了一个新的变量作用域? – 2012-07-06 16:49:13
刚刚看到http://stackoverflow.com/questions/7546285/creating-lambda-inside-a-loop?rq=1是一个重复的问题。我怎样才能关闭这个或我应该删除它? – 2012-07-06 16:49:38
@tampis:只需投票结束 - 版主将最终决定是否合并或删除此问题。 – 2012-07-06 16:51:38