lambda函数中的关闭变量[重复]
Posted
技术标签:
【中文标题】lambda函数中的关闭变量[重复]【英文标题】:Close variable in lambda function [duplicate] 【发布时间】:2012-10-28 14:35:11 【问题描述】:可能重复:What do (lambda) function closures capture in Python?
我有这个 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 函数中以获得预期的输出?
【问题讨论】:
***.com/questions/2295290/… 能回答您的问题吗?看起来有点像骗子 @ThiefMaster:确实如此,我看到我在此处提出的答案中使用的相同技术。 D'oh...虽然问题并不完全相同,但我的问题确实有答案。无论如何,它不是被接受的,问题是关于理解闭包而不是达到一个精确的目标。 【参考方案1】:您可以将txt
的值设置为关键字参数的默认值:
dictfun = dict()
for txt in ("a", "b", "c"):
dictfun[txt] = lambda txt=txt: "function " + txt
【讨论】:
以上是关于lambda函数中的关闭变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章