Python 使用生成器打印无限序列
我正在尝试创建一个生成器,它打印出指定的无限序列。目前,我有以下代码:Python 使用生成器打印无限序列,python,generator,infinite-sequence,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 >&g
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,这不是我想要的 只要循环一下就行了
y = itertools.cycle(numGen())
如果您使用的是Python3.3或更高版本,那么可以使用yield from,它从iterable生成连续的元素。然后你可以把它放到一个无限循环中——事实上,你的函数并不是无限的
def numGen():
while 1:
yield from range(1,13)
当它完成生成从1到12的数字时,循环将重新开始序列。显示的生成器的核心问题是它只循环序列一次,然后停止。一个简单的改变是将其包装在一个外部,而这是真实的,例如:
这将是无限的,因为它将在每次之前的完成之后重新启动序列迭代。这确实有效,但是生成器函数应该能够无限循环通过它。不过,我会将itertools添加到我的工具箱中,用于其他项目!太棒了,谢谢!我没有想到将while和for循环合并在一起。我的代码以前的迭代要么是i=range1,13,而True:yield i,要么是while True:yield i,函数带有一个参数num。感谢您的快速响应@不客气。花时间了解完成这项任务的不同方法。我专注于展示问题;不一定是“最好的”或“最具蟒蛇精神的”方式。我会的,到目前为止,在我的课堂上,这几乎是我的教授教我们如何使用发电机的方式。我将/正在努力研究更多关于Generators的使用是的,我正在使用Python3.4,我不知道会有收益,但这也很有帮助,谢谢!我知道它不是无限的,但我忘了我可以嵌套一段时间和一个for循环,从而使它无限。
def numGenForever():
while True:
for i in range(1,13):
yield i