3
可能重複:
What do (lambda) function closures capture in Python?關閉可變
我有把幾個lambda函數在字典中的這個Python代碼:
dictfun = dict()
for txt in ("a", "b", "c"):
dictfun[txt] = lambda: "function " + txt
這些功能只是使用它們被調用的參數返回一個字符串。
我期望看到像function a
的輸出dictfun["a"]()
,function b
爲dictfun["b"]()
等等,但是這是我得到:
>>> dictfun["a"]()
'function c'
>>> dictfun["b"]()
'function c'
>>> dictfun["c"]()
'function c'
看來,他們都評價txt
給它設置的最後一個值,即其當前價值。總而言之,這個變量不會被關閉到lambda表達式中。我甚至可以這樣做:
>>> txt = "a"
>>> dictfun["c"]()
'function a'
我怎麼可能爲了得到我的預期產出關閉txt
到lambda函數?
確實http://stackoverflow.com/questions/2295290/what-do-lambda-function-closures-capture -in-python回答你的問題?看起來有點像傻瓜 – ThiefMaster
@ThiefMaster:它的確如此,我看到我在這裏提出的答案中使用的相同技巧。 –
D'oh ...儘管問題並不完全一樣,但我的問題的確存在一個答案。無論如何,這不是公認的目標,而是關於理解關閉而不是達到精確的目標。 – etuardu