为什么这个缩进有效?蟒蛇

时间:2014-04-30 11:12:52

标签: python indentation

这是我的代码:

def is_prime(x):
    if x < 2:
        return False

    else:
        for i in range(2,x):
            if x % i == 0:
                return False
        else:
            return True

print is_prime(508)

我不明白为什么最后else: return true与缩进有关。如果我输入

else:
            for i in range(2,x):
                if x % i == 0:
                    return False
                else:
                    return True

然后def is_prime(2)返回none?为什么呢?

4 个答案:

答案 0 :(得分:8)

因为在python中,for - 循环可以有一个else - 子句。

如果循环正常退出,则执行此子句。如果使用break语句退出循环,则不会输入else

我建议您阅读官方doc,如果仍然不清楚,this blog会很好地总结这个概念。

答案 1 :(得分:1)

forwhile循环也知道else条款,而不只是iftry条款。

当控件离开循环时,循环的else子句被执行,除非你使用break来中止循环。

我必须承认这种行为puzzled me at first, as well,但它实际上非常明智,而且是一个有用的功能(请参阅this answer以获得一个好例子)。

答案 2 :(得分:1)

在第二个示例中,elseif处于同一缩进级别,因此它们都属于一起。因此,对于循环中的第一项,您将返回FalseTrue,具体取决于该值;即循环不会继续。

现在,在原始代码中,elsefor处于同一级别。所以它是for..else,实际上是a special construct

  

当项目耗尽时,else子句中的套件(如果存在)将被执行,并且循环终止。

所以基本上,如果循环自然结束(不调用break),则执行else块。所以在你的情况下,它与离开else

是一样的
for i in range(2,x):
    if x % i == 0:
        return False
return True

答案 3 :(得分:0)

正如其他人所说,for循环可以有一个else子句。阅读docs

中的更多内容
  

当与循环一起使用时,else子句有更多共同点   try语句的else子句比if语句的else子句:   一个try语句的else子句在没有异常发生时运行,并且a   当没有中断发生时,loop的else子句运行。