使用生成器打印无限序列
Print an infinite sequence using generator
我正在尝试创建一个打印出指定无限序列的生成器。目前,我有以下代码:
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,... 我我尝试在 yield 行之后添加 "i += 1" 行,但它会打印出 14,这不是我想要的。
循环就好了
y = itertools.cycle(numGen())
如果您使用的是 Python 3.3 或更高版本,则可以使用 yield from
,它会从可迭代对象中生成连续的元素。然后您可以将它放入一个无限循环中 - 实际上,您的函数没有无限的东西。
def numGen():
while 1:
yield from range(1,13)
当它完成生成从 1 到 12 的数字时,循环将重新开始序列。
所示生成器的核心问题是它仅 循环序列一次 - 然后停止。一个简单的更改是将其包装在外部 while True
中,例如:
def numGenForever():
while True:
for i in range(1,13):
yield i
这将是 "infinite",因为它会在之前的每次完成后重新开始序列迭代。
我正在尝试创建一个打印出指定无限序列的生成器。目前,我有以下代码:
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,... 我我尝试在 yield 行之后添加 "i += 1" 行,但它会打印出 14,这不是我想要的。
循环就好了
y = itertools.cycle(numGen())
如果您使用的是 Python 3.3 或更高版本,则可以使用 yield from
,它会从可迭代对象中生成连续的元素。然后您可以将它放入一个无限循环中 - 实际上,您的函数没有无限的东西。
def numGen():
while 1:
yield from range(1,13)
当它完成生成从 1 到 12 的数字时,循环将重新开始序列。
所示生成器的核心问题是它仅 循环序列一次 - 然后停止。一个简单的更改是将其包装在外部 while True
中,例如:
def numGenForever():
while True:
for i in range(1,13):
yield i
这将是 "infinite",因为它会在之前的每次完成后重新开始序列迭代。