在 python 中调用 lambda's in list 与调用 lambda's in list 的结果不一致

问题描述 投票:0回答:1

问题是我期望下面的三个列表在调用时是相同的,但是l2和l3彼此相等,l1不同

l1 = [(lambda: j) for j in range(2)]
l2= [lambda:0, lambda: 1]
l3 = [(lambda: j)() for j in range(2)]
print(l1)
print(l2)
print(l1[0]())
print(l2[0]())
print("l3: ", l3)

另外,当我打印出 l1 和 l2 (未调用)时,我得到完全相同的 lambda 对象列表,但它们在调用时是不同的。发生什么事了?

python lambda
1个回答
0
投票
l1 = [(lambda: j) for j in range(2)]

这里

j
是列表理解范围内的变量,因此它对于理解循环的两次迭代都是“活动的”,但是当该循环完成时,
j
等于
1
,因此两个 lambda 将返回相同的值
j
的值。


l2 = [lambda: 0, lambda: 1]

这里有两个具有具体返回值的 lambda。这里没有发生任何有趣或棘手的事情。


l3 = [(lambda: j)() for j in range(2)]

在这里,您在每次理解迭代中构造 并调用 lambda,因此您不会直接存储

j
的值,而是存储 lambda 的返回值。这就是为什么此代码不会像
j
示例那样“记住”
l1
的最后一个值。

© www.soinside.com 2019 - 2024. All rights reserved.