本文介绍了怪异的行为:列表理解内的Lambda的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在python 2.6中:
In python 2.6:
[x() for x in [lambda: m for m in [1,2,3]]]
导致:
[3, 3, 3]
我希望输出为[1、2、3].即使使用非列表理解方法,我也会遇到完全相同的问题.甚至在我将m复制到另一个变量之后.
I would expect the output to be [1, 2, 3]. I get the exact same problem even with a non list comprehension approach. And even after I copy m into a different variable.
我想念什么?
推荐答案
要使Lambda记住m
的值,可以使用具有默认值的参数:
To make the lambdas remember the value of m
, you could use an argument with a default value:
[x() for x in [lambda m=m: m for m in [1,2,3]]]
# [1, 2, 3]
之所以起作用,是因为默认值在定义时设置一次.现在,每个lambda都使用其自己的默认值m
,而不是在执行lambda时在外部范围中查找m
的值.
This works because default values are set once, at definition time. Each lambda now uses its own default value of m
instead of looking for m
's value in an outer scope at lambda execution time.
这篇关于怪异的行为:列表理解内的Lambda的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!