在Python中,while循环的'else'子句有什么好处?

4 投票
4 回答
596 浏览
提问于 2025-04-16 09:03

在while循环之后的任何代码,都会在while循环的条件变为假(False)时执行。在Python的while循环中,'else'部分的代码也是一样。那么,while循环中加上'else'有什么好处呢?

4 个回答

0

引用ars的话:“else部分只有在你的while条件变为假时才会执行。如果你中断了循环,或者发生了异常,它就不会被执行。”

查看 Python中while语句的else部分

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
}

而使用循环的else子句,你就可以去掉那个(有点牵强的)found标志了。

7

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 则不同,因为它会在 检查条件的情况下直接退出循环。

撰写回答