在python中为while循环使用'else子句'有什么好处?

时间:2010-12-26 04:39:10

标签: python controls

while循环中的条件将在while循环中的条件变为False时执行。对于python中while循环的'else子句'部分中的代码,它是相同的。那么在while循环中使用'else'有什么好处?

4 个答案:

答案 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时执行。如果你退出循环,或者引发异常,它将不会被执行。”

请参阅Else clause on Python while statement

答案 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()