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

ilm*_*moi 1 python generator

为什么这样做:

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]
Run Code Online (Sandbox Code Playgroud)

但这不会:

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]
Run Code Online (Sandbox Code Playgroud)

唯一的区别是在列表函数内移动生成器。我发现我们需要首先将它分配给一个变量,然后它才能工作,这是非常奇怪的......

什么原因?

Dee*_*ace 6

因为evens_gen()在每次迭代中都会创建一个新的生成器,因此next将始终获得第一个元素,即0.