这是我的代码:
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?为什么呢?
答案 0 :(得分:8)
因为在python中,for
- 循环可以有一个else
- 子句。
如果循环正常退出,则执行此子句。如果使用break
语句退出循环,则不会输入else
。
答案 1 :(得分:1)
for
和while
循环也知道else
条款,而不只是if
或try
条款。
当控件离开循环时,循环的else
子句被执行,除非你使用break
来中止循环。
我必须承认这种行为puzzled me at first, as well,但它实际上非常明智,而且是一个有用的功能(请参阅this answer以获得一个好例子)。
答案 2 :(得分:1)
在第二个示例中,else
与if
处于同一缩进级别,因此它们都属于一起。因此,对于循环中的第一项,您将返回False
或True
,具体取决于该值;即循环不会继续。
现在,在原始代码中,else
与for
处于同一级别。所以它是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子句运行。