3

可能重复:
(lambda)函数闭包在 Python 中捕获了什么?

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

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

这些函数只返回一个带有调用它们的参数的字符串。
我希望看到类似function afor dictfun["a"]()function bfordictfun["b"]()等的输出,但这就是我得到的:

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

似乎它们都评估txt为它设置的最后一个值,即它的当前值。总之,变量没有封闭到 lambdas 中。我什至可以这样做:

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

我怎样才能接近txtlambda 函数以获得预期的输出?

4

1 回答 1

5

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

dictfun = dict()
for txt in ("a", "b", "c"):
    dictfun[txt] = lambda txt=txt: "function " + txt
于 2012-11-08T11:40:06.900 回答