我目前正在阅读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
答案 0 :(得分:8)
else:
块之后的for:
块仅在循环正常完成时运行。如果您break
退出循环,它将无法运行。在这种情况下,这没有任何区别,因为你永远不会脱离循环;你return
在它结束之前或你让它正常完成。
答案 1 :(得分:2)
这种行为的原因是在python for loop实际上可以跟着else语句。如果通常循环完成,则执行Else分支,并在破坏后跳过。