Python:if-else之间的循环,如何/为什么这样做?

时间:2011-08-11 01:17:11

标签: python conditional if-statement

我目前正在阅读Lynda Python教程,在有关生成器的部分中,我看到以下代码:

def isprime(n):
    if n == 1:
        return False
    for x in range(2, n):
        if n % x == 0:
            return False
    else:
        return True

我一开始并没有抓住它,但是当我浏览代码时,我注意到else关键字在它和同一缩进级别的if之间有一个完整的for循环。令我惊讶的是,代码不仅运行,而且实际上产生了正确的行为。

如果我用简单的print("Hello, World")语句替换for循环,那么我才会得到预期的解释器错误。

这种语法背后的原因是什么,为什么它适用于循环语句而不是print()之类的其他语句?

作为参考,我原本希望代码写成如下:

def isprime(n):
    if n == 1:
        return False     
    for x in range(2, n):
        if n % x == 0:
            return False
    return True

2 个答案:

答案 0 :(得分:8)

else:块之后的for:块仅在循环正常完成时运行。如果您break退出循环,它将无法运行。在这种情况下,这没有任何区别,因为你永远不会脱离循环;你return在它结束之前或你让它正常完成。

答案 1 :(得分:2)

这种行为的原因是在python for loop实际上可以跟着else语句。如果通常循环完成,则执行Else分支,并在破坏后跳过。