我是Python初学者。我发现“for-else”和“while-else”中的“else”完全没必要。因为“for”和“while”最终将运行到“else”,我们可以使用常用的行。
例如:
for i in range(1, 5):
print i
else:
print 'over'
和
for i in range(1, 5):
print i
print 'over'
是一样的。
那么为什么Python在“for-else”和“while-else”中有“else”?
答案 0 :(得分:26)
你对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”语句,它们不是。
对同一想法的更长描述:http://nedbatchelder.com/blog/201110/forelse.html
答案 1 :(得分:1)
for ... 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
请注意,如果搜索列表为空(for
),则[]
不会初始化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
语句将不会执行。