exibite777
@exibite777
Ведущий системный аналитик

Объясните на пальцах: Как работает generator.send() ???

Объясните пожалуйста на пальцах как работает вот этот код
def jumping_range(up_to):
    """Генератор возвращает последовательность целых чисел от 0 до значения в up_to, исключая последнее.
    Отправка значения в генератора сдвинет последовательность на указанное количество значений.
    """
    index = 0
    while index < up_to:
        jump = yield index
        if jump is None:
            jump = 1
        index += jump

if __name__ == '__main__':
    iterator = jumping_range(5)
    print(next(iterator))  # 0
    print(iterator.send(2))  # 2
    print(next(iterator))  # 3
    print(iterator.send(-1))  # 2
    for x in iterator:
        print(x)  # 3, 4

Из того что я нашел в официальной документации https://www.python.org/dev/peps/pep-0342/#specific... и https://docs.python.org/3.7/reference/expressions....
Возобновляет выполнение и «отправляет» значение в функцию генератора. Аргумент value становится результатом текущего выражения yield

Из этого описания не понятно:
1. Как именно работает смещение generator.send(2) или generator.send(1)
2. Как сделать для генератора специалные команды типа "stop" для вызова StopIteration
или "reload" для того чтобы начал с начала
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Возможно, этот ответ вам поможет разобраться.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы