我觉得我可能忽略了一些简单的东西,但是我似乎无法确切地弄清楚。请看下面的代码:
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
。然而,打印生成器表达式的for循环会输出4 5 6 7 8 9
。我认为这与列表推导的声明有关(在扩展之前声明)。但是为什么生成器的结果不同,因为它也是在扩展列表之前声明的呢?换句话说,内部发生了什么?