如何实现无限生成器?



我正在努力理解生成器。我遇到了这个问题,需要一些循序渐进的解释。

问题要求创建一个名为odds的生成器函数。当在for循环中用尽时,从生成器函数创建的生成器对象应该产生第一个count数字。对于这个问题,返回的第一个奇数应该是1。

我很难理解这个问题,从生成器函数创建的生成器对象应该在for循环中使用耗尽时产生第一个count数字,这意味着什么?我也想知道为什么我们需要count -= 1在这个功能。

def odds(count):
i = 1 
while True:
if i % 2:
count -= 1
yield i
if not count:
break
i += 1

生成器函数是简单的yield值而不是return值的函数,因此非常容易编写。例如:

def odds(count):
i = 1
for _ in range(count):
yield i
i += 2
for i in odds(10):
print(i)

使用这两者之间还有更多的区别。这里有一个更详细的比较:Python中Yield和Return的区别。

Stackoverflow不打算取代现有的教程或文档,所以为了更深入地了解生成器是如何工作的,我建议您参考有关该主题的教程,例如:如何在Python中使用生成器和yield。

最新更新