在lambda函数中关闭变量

时间:2012-11-08 11:37:41

标签: python lambda closures

  

可能重复:
  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的{​​{1}},dictfun["a"]()的{​​{1}}等输出,但这是我得到的:

function b

看起来他们都将dictfun["b"]()评估为它设置的最后一个值,即它的当前值。总之,变量不会关闭到lambdas中。我甚至可以这样做:

>>> dictfun["a"]()
'function c'
>>> dictfun["b"]()
'function c'
>>> dictfun["c"]()
'function c'

如何将txt关闭到lambda函数中以获得预期的输出?

1 个答案:

答案 0 :(得分:5)

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

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