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

Kam*_*ely 3 python controls

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

Kat*_*iel 7

else如果break循环中有语句,则不会执行.来自文档:

while只要表达式为真,该语句就用于重复执行:

while_stmt ::=  "while" expression ":" suite
                ["else" ":" suite]
Run Code Online (Sandbox Code Playgroud)

这反复测试表达式,如果是,则执行第一个套件; 如果表达式为假(可能是第一次测试)else,则执行该子句的套件(如果存在)并且循环终止.

一个break在首套房执行的语句终止循环,不执行该else条款的套件.continue在第一个套件中执行的语句会跳过套件的其余部分,然后返回测试表达式.

(强调我的)for顺便说一句,这也适用于循环.它通常不常用,但通常非常优雅.


我相信标准用例是当您在容器中搜索以查找值时:

for element in container:
    if cond(element):
        break
else:
    # no such element
Run Code Online (Sandbox Code Playgroud)

另请注意,循环后,element将在全局范围内定义,这很方便.


在我从一些邮件列表中听到一个很好的解释之前,我发现它违反直觉:

else套件总是在评估条件时执行False

因此,如果while循环的条件被执行并且发现为false,则循环将停止并且else套件将运行.break是不同的,因为它退出循环而不测试条件.