首页 > 解决方案 > 如何在 python3 中通过 for_loop 创建许多不同的 lambda 函数?

问题描述

我尝试通过以下代码创建不同的功能:

a = []

for i in range(5):
    a.append(lambda: i)

print(a)

它显示了它:

[<function <lambda> at 0x008DA100>, <function <lambda> at 0x008DA0B8>, <function <lambda> at 0x008DA148>, <function <lambda> at 0x008DA190>, <function <lambda> at 0x008DA1D8>]

我发现所有的功能都不一样,但是后来我发现它不能工作。尽管所有功能都指向不同的地址,但所有功能都显示相同的编号:4;

a[0]()
4
a[1]()
4
a[2]()
4
a[3]()
4
a[4]()
4

请告诉我如何解决这个问题。

标签: python-3.xfunctionfor-looplambda

解决方案


您的 lambda 表达式都返回 4 的原因是它们都引用了相同的变量 - i。循环结束后的值为i4。由于 lambda 在调用时执行 - 所有 lambda 都评估相同的表达式:i& 因此得到相同的结果。

为了解决这个问题,您需要将 i 的值绑定为 lambda 创建时间。为此,您可以使用具有默认值的单参数 lambda:

a = []

for i in range(5):
    a.append(lambda x=i: x)

print(a[0]())

这使:

0

正如预期的那样。


推荐阅读