Python lambda 理解打印 i

Python lambda comprehension print i

我正在尝试使用理解来编写一个 lambda 列表,其中调用每个 lambda 时都会打印它在列表中的位置的索引。

list = [lambda : print(i) for i in range(10)]

list[0]()

但问题是调用任何 lambda 都产生相同的结果,它们打印 9。我如何才能以我打算为每个 lambda 的方式捕获 i 的值?

您需要确保 i 在 lambda 被 定义 时被评估并绑定在 lambda 体内,而不是延迟它直到它被定义called(此时循环已完成且 i = 9)。一种方法是使用 i 作为 lambda 参数的默认值,因为默认值是在定义函数时计算的,而不是在调用函数时计算的:

>>> funcs = [lambda x=i: print(x) for i in range(10)]
>>> funcs[0]()
0
>>> funcs[1]()
1

请注意,您实际上不需要使用不同的变量名;您可以将参数命名为 i,它将隐藏在 lambda 主体内,并且仍然以相同的方式工作:

>>> funcs = [lambda i=i: print(i) for i in range(10)]