python: почему мне нужно присвоить функцию генератора переменной, или она не будет работать? - PullRequest
1 голос
/ 28 апреля 2020

Почему это работает:

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]

Единственное отличие заключается в перемещении генератора внутри функции списка. Я нахожу это очень странным, что нам нужно сначала присвоить его переменной, а затем он работает ...

В чем причина?

1 Ответ

6 голосов
/ 28 апреля 2020

Поскольку evens_gen() создает новый генератор на каждой итерации, следовательно, next всегда будет получать первый элемент, который 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...