Объясните пожалуйста на пальцах как работает вот этот код
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" для того чтобы начал с начала