在lambda函数中关闭变量

etu*_*rdu 3 python lambda closures

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

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

dictfun = dict()
for txt in ("a", "b", "c"):
    dictfun[txt] = lambda: "function " + txt
Run Code Online (Sandbox Code Playgroud)

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

>>> dictfun["a"]()
'function c'
>>> dictfun["b"]()
'function c'
>>> dictfun["c"]()
'function c'
Run Code Online (Sandbox Code Playgroud)

它们似乎都评估txt到它设置的最后一个值,即它的当前值.总之,变量不会关闭到lambdas中.我甚至可以这样做:

>>> txt = "a"
>>> dictfun["c"]()
'function a'
Run Code Online (Sandbox Code Playgroud)

我如何才能关闭txtlambda函数以获得预期的输出?

Mar*_*ers 5

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

dictfun = dict()
for txt in ("a", "b", "c"):
    dictfun[txt] = lambda txt=txt: "function " + txt
Run Code Online (Sandbox Code Playgroud)