繁体   English   中英

生成器,python,无限循环

[英]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

在我看来,您的代码中存在两个样式问题,因此很难看出问题所在:

  1. continue使用。 一个简单的if语句可以更容易地看出哪些代码可能不会执行,哪些代码肯定会执行。 当您嵌套if语句使事情变得复杂时, continue主要有用。

  2. 您不使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM