使用生成器打印无限序列



我正试图创建一个生成器,打印出指定的无限序列。目前,我有以下代码:

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,这不是我想要的。

所示生成器的核心问题是它只循环序列一次,然后停止。一个简单的改变是将其封装在外部while True中,例如:

def numGenForever():
    while True:
        for i in range(1,13):
           yield i

这将是"无限的",因为它将在每次之前完成后重新启动序列迭代。

只需循环即可。

y = itertools.cycle(numGen())

如果您使用的是Python 3.3或更高版本,则可以使用yield from,它从迭代中生成连续元素。然后你可以把它放入一个无限循环中——事实上,你的函数没有无限的东西。

def numGen():
    while 1:
        yield from range(1,13)

当它完成产生从1到12的数字时,循环将重新开始序列。

最新更新