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 bdictfun["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函数中的关闭变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

for循环中的lambda只取最后一个值[重复]

for循环中的lambda只取最后一个值[重复]

python pandas lambda有2个及更多变量[重复]

C ++中的Lambda函数,参数和逻辑[重复]

PyQt5按钮lambda变量变为布尔值[重复]

PyQt5按钮lambda变量变为布尔值[重复]