Способ с send
, который позволяет (пере) установить i
на желаемое значение:
def index_generator():
i = 0
while True:
reset = yield i**2
if reset is None:
i += 1
else:
i = reset - 1
Использование демонстрации:
my_gen = index_generator()
print([next(my_gen) for _ in range(5)])
my_gen.send(0)
print([next(my_gen) for _ in range(5)])
my_gen.send(100)
print([next(my_gen) for _ in range(5)])
Выход:
[0, 1, 4, 9, 16]
[0, 1, 4, 9, 16]
[10000, 10201, 10404, 10609, 10816]
Вариант, который не использует трюк - 1
, а вместо этого просто дает:
def index_generator():
i = 0
while True:
reset = yield i**2
if reset is None:
i += 1
else:
i = reset
yield