这两个Python函数之间有什么区别?

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]。 有人可以解释一下吗?我感到很困惑。

1
第一个使用 [ ] 括号,第二个使用 ()。使用 [ ] 所有的数字总是设置为最后添加的值。 - Nathan
@Nathan,我对答案很好奇,你能详细解释一下吗?我也点了赞,觉得很有趣。 - N.K
1
好问题,有很好的答案 https://dev59.com/u14c5IYBdhLWcg3wJnU- - BENY
使用 [],所有的 lambda 表达式都会立即创建,但是当它们在第二个列表推导中被评估时,第一个列表推导中的 i(闭合的)等于 3 - 这就是链接重复内容中所解释的。使用 (),lambda 表达式将在 print 行的列表推导运行时按需创建,因此每个 lambda 都会在调用之前立即创建,并带有相应的 i 值。 - Karl Knechtel
1个回答

0

使用()的第二个代码片段是一个生成器。 用于节省内存。

请查看PEP-289


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接