python:为什么需要将生成器函数分配给变量,否则将不起作用?

问题描述 投票:1回答:1

为什么这样做:

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]

唯一的区别是将生成器移到列表函数中。我觉得这很奇怪,我们需要先将其分配给一个变量,然后它才能起作用...

是什么原因?

python generator
1个回答
6
投票

因为evens_gen()在每次迭代中都会创建一个新的生成器,因此next总是会得到第一个元素0

© www.soinside.com 2019 - 2024. All rights reserved.