为什么这样做:
def even_gen():
n = 0
while True:
yield n
n += 2
evens_ = even_gen()
evens = list(next(evens_) for _ in range(5))
#[0,2,4,6,8]
但这不是:
def even_gen():
n = 0
while True:
yield n
n += 2
evens = list(next(evens_gen()) for _ in range(5))
#[0,0,0,0,0]
唯一的区别是将生成器移到列表函数中。我觉得这很奇怪,我们需要先将其分配给一个变量,然后它才能起作用...
是什么原因?
因为evens_gen()
在每次迭代中都会创建一个新的生成器,因此next
总是会得到第一个元素0
。