【发布时间】:2021-10-29 14:42:18
【问题描述】:
我很难理解生成器。遇到这个问题,需要在这里逐步解释。
问题被要求创建一个名为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
【问题讨论】:
-
当涉及到这样的基础知识时,我建议不要在问答网站上询问(并且不得不等待),而是在 Google 上搜索已经存在的众多教程之一。您需要掌握的是调用使用
return的普通函数和调用使用yield的生成器函数之间的区别。至于count,每次奇数为yielded时,它就减1,直到达到0,if not count:运行并退出while循环。 -
count表示您想要多少个奇数,并且是您传递给函数的参数,因此-=1只是倒数到 0 并为您提供您所要求的奇数为。 -
它有助于使用生成器函数并观察迭代它的结果。如果您说
x = odds(9),那么对next(x)的重复调用将为您每次使用yield i提供i的值,或者在StopIteration循环最终终止时提高StopIteration。