【发布时间】:2020-02-16 09:03:58
【问题描述】:
我认为我忽略了一些简单的事情,但我似乎无法弄清楚到底是什么。请考虑以下代码:
a = [2, 3, 4, 5]
lc = [ x for x in a if x >= 4 ] # List comprehension
lg = ( x for x in a if x >= 4 ) # Generator expression
a.extend([6,7,8,9])
for i in lc:
print("{} ".format(i), end="")
for i in lg:
print("{} ".format(i), end="")
我预计两个 for 循环会产生相同的结果,所以 4 5。但是,打印生成器 exp 的 for 循环会打印 4 5 6 7 8 9。我认为这与列表理解的声明(在扩展之前声明)有关。但是为什么生成器的结果不同,因为它也是在扩展列表之前声明的?例如。内部情况如何?
【问题讨论】:
-
不完全同意欺骗,虽然代码完全不同,但原理相同。
-
接受的答案解释了它stackoverflow.com/a/42806184/6451573,但我相信我们可以找到大量其他重复目标。