[英]generators, python, infinite loop
我正在尝试使用生成器生成奇数列表(只是为了更好地了解生成器)。 我编写了以下代码,但它不会停止运行! 虽然我希望代码在条件 i>n 满足时停止。 任何帮助表示赞赏。
import sys
def odd(n):
i=0
while True:
if i%2==0:
continue
yield i
i+=1
if i>n:
return
# Here we build a generator
g = odd(10)
while True:
try:
print(next(g),end=' ')
except StopIteration:
sys.exit()
当i
是偶数时,您不会增加它,因此它在循环的每个后续迭代中保持偶数并且永远不会大于n
。
无论是否为偶数,您都想增加i
。
def odd(n):
i=0
while True:
if i%2 != 0: # yield i only if it is odd
yield i
i+=1 # Increment i in either case
if i>n:
return
在我看来,您的代码中存在两个样式问题,因此很难看出问题所在:
continue
使用。 一个简单的if
语句可以更容易地看出哪些代码可能不会执行,哪些代码肯定会执行。 当您嵌套if
语句使事情变得复杂时, continue
主要有用。
您不使用while
条件。 这假设while
循环必须至少执行一次。 在编写循环时,您通常应该考虑如果循环需要执行 0 次会发生什么。 如果有人通过-1
的参数怎么办? 如果将i
的初始值更改为 1 以保存迭代会怎样?
def odd(n):
i = 0
while i <= n:
if i % 2:
yield i
i += 1
# Automatically return and throw StopIteration.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.