Напечатайте бесконечную последовательность, используя генератор
Я пытаюсь создать генератор, который печатает указанную бесконечную последовательность. В настоящее время у меня есть следующий код:
def numGen():
for i in range(1,13):
yield i
Что тогда дает мне:
>>> y = numGen()
>>> y
<generator object numGen at 0x7f6b88d22570>
>>> y.__next__()
1
...
>>> y.__next__()
12
>>> y.__next__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module> StopIteration
Я не уверен, что нужно изменить, чтобы сбросить, а затем распечатать 1, 2, 3, ..., 11, 12, 1, 2, 3,... Я попытался добавить строка "i += 1" после линии доходности, но тогда она выведет 14, что не то, что я хочу.
3 ответа
Основная проблема с показанным генератором состоит в том, что он только зацикливает последовательность один раз - и затем он останавливается. Простое изменение будет заключаться в том, чтобы обернуть его во внешнем while True
Например:
def numGenForever():
while True:
for i in range(1,13):
yield i
Тогда это будет "бесконечным", потому что он будет перезапускать итерацию последовательности после каждого предыдущего завершения.
Если вы используете Python 3.3 или более позднюю версию, вы можете использовать yield from
, который возвращает последовательные элементы из итерируемого. Затем вы можете поместить это в бесконечный цикл - так как в вашей функции нет ничего бесконечного.
def numGen():
while 1:
yield from range(1,13)
Когда он заканчивает давать числа от 1 до 12, цикл начнет последовательность снова.