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

问题描述

为什么会这样:

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]

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

什么原因?

标签: pythongenerator

解决方案


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


推荐阅读