使用生成器打印无限序列

时间:2015-12-09 03:03:14

标签: python generator infinite-sequence

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

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 个答案:

答案 0 :(得分:3)

只需循环它。

y = itertools.cycle(numGen())

答案 1 :(得分:3)

如果您使用的是Python 3.3或更高版本,则可以使用yield from,它会生成迭代中的连续元素。然后你可以把它放到一个无限循环中 - 事实上,你的功能并不是无限的。

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

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

答案 2 :(得分:2)

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

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

这将是&#34;无限&#34;因为它会在每次完成之后重新启动序列迭代。