0

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

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

4

3 回答 3

4

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

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

这将是“无限的”,因为它将在每次先前完成后重新开始序列迭代。

于 2015-12-09T03:13:46.413 回答
3

只是循环它。

y = itertools.cycle(numGen())
于 2015-12-09T03:05:11.623 回答
3

如果您使用的是 Python 3.3 或更高版本,则可以使用yield from,它从可迭代对象中生成连续元素。然后,您可以将其放入无限循环中 - 实际上,您的函数没有无限可能。

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

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

于 2015-12-09T03:13:38.097 回答