我是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呢
发布于 2012-07-20 10:50:57
您对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's”配对。您的示例是相同的,但混合使用"break“语句时,它们就不同了。
对同一概念的更长描述:http://nedbatchelder.com/blog/201110/forelse.html
发布于 2017-06-13 21:54:03
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时,它没有被定义。
for z in []:
if 5 == z:
break
print "z = ",z输出
print "z = ",z
NameError: name 'z' is not defined总之,只要for循环自然终止,就会执行else子句。如果for循环中发生中断或异常,则不会执行else语句。
https://stackoverflow.com/questions/11572164
复制相似问题