Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用生成器打印无限序列_Python_Generator_Infinite Sequence - Fatal编程技术网

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