kitscribe
@kitscribe
Хаброжитель

Почему генератор возвращает неверное значение?

Есть вот такой
код
def test_gen():
    value = yield
    end = value + 20

    while True:
        if value > end:
            break
        yield value
        value += 1

mygen = test_gen()
next(mygen)
mygen.send(10)

for item in mygen:
    print(item)


Я ожидаю, что итерация начнётся с 10 и закончится 30, но получаю следующий
вывод
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30


Почему происходит именно так?
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Потому что .send() не только передаёт значение внутрь генератора, но и возвращает следующее yield'нутое значение.
mygen = test_gen()
next(mygen)
print('Send:', mygen.send(10))

выведет Send: 10.
Так что тебе придётся сделать ещё один промежуточный yield None сразу после получения value = yield.

Ну и да, зачем break когда можно сделать условие в while?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы