【问题标题】:Close variable in lambda function [duplicate]lambda函数中的关闭变量[重复]
【发布时间】: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 函数中以获得预期的输出?

【问题讨论】:

  • stackoverflow.com/questions/2295290/… 能回答您的问题吗?看起来有点像骗子
  • @ThiefMaster:确实如此,我看到我在此处提出的答案中使用的相同技术。
  • D'oh...虽然问题并不完全相同,但我的问题确实有答案。无论如何,它不是被接受的,问题是关于理解闭包而不是达到一个精确的目标。

标签: python lambda closures


【解决方案1】:

您可以将txt 的值设置为关键字参数的默认值:

dictfun = dict()
for txt in ("a", "b", "c"):
    dictfun[txt] = lambda txt=txt: "function " + txt

【讨论】:

    猜你喜欢
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 2017-09-17
    • 2015-10-25
    相关资源
    最近更新 更多