Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个缩进为什么有效?python_Python_Indentation - Fatal编程技术网

这个缩进为什么有效?python

这个缩进为什么有效?python,python,indentation,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) 那么def is_prime(2)返回none?为什么?因为在

这是我的密码:

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)

那么def is_prime(2)返回none?为什么?

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

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


我建议你仔细阅读官方文件,如果还不清楚的话,把这个概念总结得相当好。

for
,而
循环也知道
else
子句,而不仅仅是
if
try
语句

循环的
else
子句在控件离开循环时执行,除非使用
break
中止循环


我必须承认这种行为,但它实际上非常合理,而且是一个有用的特性(请参见一个很好的示例)。

在第二个示例中,
else
if
处于相同的缩进级别,因此它们都属于同一类。因此,对于循环中的第一项,您将根据该值返回
False
True
;i、 循环不会继续

现在,在原始代码中,
else
处于同一级别。所以它是一个
,用于..else
,实际上是:

当项目用尽时,执行
else
子句中的套件(如果存在),循环终止

因此,如果循环自然完成(不调用
break
),则基本上执行else块。因此,在您的情况下,这与不使用
else
相同:

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

正如其他人所说,for循环可以有else子句。阅读更多关于

当与循环一起使用时,else子句与 try语句的else子句比if语句的else子句更重要: try语句的else子句在没有异常发生时运行,并且 循环的else子句在未发生中断时运行


关于“困惑的原因”这个话题,有一个很好的博客:。我建议您使用其他的结构,因为这会让您和未来的读者感到困惑。
for i in range(2,x):
    if x % i == 0:
        return False
return True