今天我探索的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