所以我想做一个列表,其中lambda函数是列表的元素。lambda函数调用另一个传递参数的函数。问题是lambda函数只"保存"列表中所有其他项的最后一个值。见下文
问题是我该怎么做才能得到想要的结果?
编辑:上述问题被简化了。我必须用lambda来表示解
这是我试图理解问题的代码:
def f(B):
print(B)
A = [lambda: f(a) for a in ["foo", "faz", "baz"]]
for a in A:
a()
预期的结果:
foo
faz
baz
实际结果:
baz
baz
baz
如果你需要创建一个函数调用数组,你可以用下面的方法实现你想要做的:
def f(x):
def g():
print(x)
return g
A = [f(a) for a in ["foo", "faz", "baz"]]
for a in A:
a()
输出foo
faz
baz
当lambda
访问它所定义的上下文时,for
循环不会在每次运行时创建一个新的上下文。那样效率太低了。
因此,当您的代码实际调用lambda函数时,上下文已经结束,a
包含循环分配给它的最后一个值。
正确的代码:
def f(B):
print(B)
A = ["foo", "faz", "baz"]
for a in A:
f(a)
如果这个答案不充分,请首先说明为什么需要lambda。
For循环在lambda中保存列表的最后一项,所以最好写在lambda之外这样的:
def b():
A = ["foo","faz","baz"]
For a in A:
Print(a)
,输出为:
foo
faz
baz