列表中的Python lambda函数给出了意想不到的结果



所以我想做一个列表,其中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

相关内容

  • 没有找到相关文章

最新更新