我有这个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函数中以获得预期的输出?
答案 0 :(得分:5)
您可以将txt
的值设置为关键字参数的默认值:
dictfun = dict()
for txt in ("a", "b", "c"):
dictfun[txt] = lambda txt=txt: "function " + txt