etu*_*rdu 3 python lambda closures
我有这个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函数以获得预期的输出?
您可以将值设置txt为关键字参数的默认值:
dictfun = dict()
for txt in ("a", "b", "c"):
dictfun[txt] = lambda txt=txt: "function " + txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |