Python 为什么“的目的是什么?”;否则";“a”之后的条款;至于;或;而";环

Python 为什么“的目的是什么?”;否则";“a”之后的条款;至于;或;而";环,python,python-3.x,Python,Python 3.x,我是Python初学者。我发现for-else和中的else,而-else是完全没有必要的。因为for和while最终将运行到else,我们可以使用通常的行 例如: for i in range(1, 5): print i else: print 'over' 及 都是一样的 那么为什么Python在for-else和中有else,而-else?关于for/else的语义,您是错的。else子句仅在循环完成时运行,例如,如果没有遇到break语句 典型的for/else循环如

我是Python初学者。我发现
for
-
else
中的
else
,而
-
else
是完全没有必要的。因为
for
while
最终将运行到
else
,我们可以使用通常的行

例如:

for i in range(1, 5):
    print i
else:
    print 'over'

都是一样的


那么为什么Python在for
-
else
中有
else
,而
-
else

关于for/else的语义,您是错的。else子句仅在循环完成时运行,例如,如果没有遇到break语句

典型的for/else循环如下所示:

for x in seq:
    if cond(x):
        break
else:
    print "Didn't find an x I liked!"
将“else”视为循环体中所有“if”的配对。您的示例是相同的,但在混合中使用“break”语句时,它们就不同了


对同一想法的更详细描述:

对于。。。else
语句用于实现搜索循环

特别是,它处理搜索循环找不到任何东西的情况

for z in xrange(10):
    if z == 5:
        # We found what we are looking for
        print "we found 5"
        break # The else statement will not execute because of the break
else:

    # We failed to find what we were looking for
    print "we failed to find 5"
    z = None

print 'z = ', z
输出:

we found 5
z =  5
该搜索与

z = None
for z in xrange(10):
    if 5 == z:
        # We found what we are looking for
        break

if z == None:
    print "we failed to find 5"
else:
    print "we found 5"

print 'z = ', z
请记住,如果搜索列表为空,则的
不会初始化z(即
[]
)。这就是为什么我们必须确保在搜索后使用z时定义它。以下内容将引发异常,因为在尝试打印时未定义
z

for z in []:
    if 5 == z:
        break

print "z = ",z
输出

    print "z = ",z
NameError: name 'z' is not defined
总之,
else
子句将在
for
循环自然终止时执行。如果
for
循环中出现中断或异常,则将不执行
else
语句

    print "z = ",z
NameError: name 'z' is not defined