今天我参加了一次面试,回答了一个问题错误。以下是这个问题:
结果是[4, 4, 4, 4]。我的答案是[1, 2, 3, 4]。我还运行了以下代码。
结果��� [1, 2, 3, 4]。 有人可以解释一下吗?我感到很困惑。
问题:
def gen():
return [lambda x: x + i for i in range(4)]
print([m(1) for m in gen()])
结果是[4, 4, 4, 4]。我的答案是[1, 2, 3, 4]。我还运行了以下代码。
def gen():
return (lambda x: x + i for i in range(4))
print([m(1) for m in gen()])
结果��� [1, 2, 3, 4]。 有人可以解释一下吗?我感到很困惑。
[]
,所有的 lambda 表达式都会立即创建,但是当它们在第二个列表推导中被评估时,第一个列表推导中的i
(闭合的)等于3
- 这就是链接重复内容中所解释的。使用()
,lambda 表达式将在print
行的列表推导运行时按需创建,因此每个lambda
都会在调用之前立即创建,并带有相应的i
值。 - Karl Knechtel