在Python中,while循环的'else'子句有什么好处?
在while循环之后的任何代码,都会在while循环的条件变为假(False)时执行。在Python的while循环中,'else'部分的代码也是一样。那么,while循环中加上'else'有什么好处呢?
4 个回答
引用ars的话:“else部分只有在你的while条件变为假时才会执行。如果你中断了循环,或者发生了异常,它就不会被执行。”
循环结构中的else子句是用来消除那些用来区分正常和“异常”退出循环的标志位。举个例子,在C语言中,你可能会写:
int found = 0;
for(int i = 0; i < BUFSIZ; i++) {
if(...predicate..) {
found++;
break;
}
}
if(found) {
// I broke out of the for
} else {
// the for loop hit BUFSIZ
}
而使用循环的else子句,你就可以去掉那个(有点牵强的)found
标志了。
else
语句在循环中如果有 break
语句的话就不会执行。从文档中可以了解到:
while
语句用于在某个条件为真时重复执行:while_stmt ::= "while" expression ":" suite ["else" ":" suite]
这个语句会不断检查条件,如果条件为真,就执行第一部分的代码;如果条件为假(可能是第一次检查时就为假),那么就会执行
else
部分的代码(如果有的话),然后循环结束。如果在第一部分的代码中执行了
break
语句,循环会直接结束,而不会执行else
部分的代码。 如果在第一部分的代码中执行了continue
语句,程序会跳过剩下的代码,重新回到条件检查。
(强调是我自己的) 这同样适用于 for
循环。虽然这种用法不常见,但在适合的情况下会显得非常优雅。
我认为标准的使用场景是当你在一个容器中查找某个值时:
for element in container:
if cond(element):
break
else:
# no such element
还要注意的是,在循环结束后,element
会在全局范围内被定义,这样很方便。
在我听到某个邮件列表的好解释之前,我觉得这个概念有点反直觉:
else
部分在条件被评估为False
时 总是 会执行
所以如果一个 while
循环的条件被执行并且结果为假,循环就会停止,接着 else
部分的代码会运行。break
则不同,因为它会在 不 检查条件的情况下直接退出循环。