【发布时间】:2012-10-28 14:35:11
【问题描述】:
我有这个 python 代码,它把几个 lambda 函数放在字典中:
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 评估为它设置的最后一个值,即它的当前值。总之,变量没有封闭到 lambdas 中。我什至可以这样做:
>>> txt = "a"
>>> dictfun["c"]()
'function a'
如何将txt 关闭到 lambda 函数中以获得预期的输出?
【问题讨论】:
-
stackoverflow.com/questions/2295290/… 能回答您的问题吗?看起来有点像骗子
-
@ThiefMaster:确实如此,我看到我在此处提出的答案中使用的相同技术。
-
D'oh...虽然问题并不完全相同,但我的问题确实有答案。无论如何,它不是被接受的,问题是关于理解闭包而不是达到一个精确的目标。