关于python:lambda函数中的关闭变量

Close variable in lambda function

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What do (lambda) function closures capture in Python?

我有一个python代码,它将几个lambda函数放在一个字典中:

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

这些函数只返回一个字符串,其中包含调用它们时使用的参数。我希望能看到像dictfun["a"]()function adictfun["b"]()function b等等的输出,但这就是我得到的:

1
2
3
4
5
6
>>> dictfun["a"]()
'function c'
>>> dictfun["b"]()
'function c'
>>> dictfun["c"]()
'function c'

他们似乎都将EDOCX1[4]评估为它设置的最后一个值,即当前值。总之,变量没有被封闭到lambda中。我甚至可以这样做:

1
2
3
>>> txt ="a"
>>> dictfun["c"]()
'function a'

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


可以将EDOCX1的值(0)设置为关键字参数的默认值:

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