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)]
我正在尝试使用理解来编写一个 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)]