while循环中的条件将在while循环中的条件变为False时执行。对于python中while循环的'else子句'部分中的代码,它是相同的。那么在while循环中使用'else'有什么好处?
答案 0 :(得分:6)
else
语句, break
将不会执行。来自docs:
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
循环的条件并且发现为false,则循环将停止并且else
套件将运行。 break
是不同的,因为它在没有测试条件的情况下退出循环。
答案 1 :(得分:1)
循环结构的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
}
而使用循环 - 否则你可以消除(有点人为的)found
标志
答案 2 :(得分:0)
引用ars:“else子句仅在while条件变为false时执行。如果你退出循环,或者引发异常,它将不会被执行。”
答案 3 :(得分:0)
对于循环执行搜索的情况,最好考虑Python循环上的else
套件。这是您处理搜索失败的情况。 (可能还有其他情况可能会使用此功能,但这是最常见且最容易记住的用户/案例)。
另一种方法是使用哨兵值:
sentinel = object()
result = sentinel
for each_item in some_container:
if matches_some_criteria(each_item):
result = each_item
break
if result is sentinel:
do_something_about_failure()