我如何理解Python循环中的“else”语句?

问题:

许多Python程序员可能不知道while循环和for循环的语法包含一个可选的else:子句:

for val in iterable:
    do_something(val)
else:
    clean_up()

else子句的主体是某些清理操作的好地方,并且在循环正常终止时执行:即,使用returnbreak退出循环跳过else子句;在continue执行后退出。我知道这只是因为我只是looked it up(又一次),因为我永远不会记住when else条款被执行。
总是?关于循环的“失败”,顾名思义?定期终止?即使循环退出return?我永远不能完全肯定,没有找到它。
我指责我对关键字选择的持续不确定性:我发现else对于这个语义来说是非常无敌的。我的问题不是“为什么这个关键字用于这个目的”(我可能会投票结束,虽然只有在阅读了答案和评论后),但我怎么能想到这个
我相信有这么多的讨论,我可以想象,这个选择是为了与try语句的else:条款(我也必须看看)保持一致,并且为了不添加到Python的保留字列表中。也许选择else的原因将会澄清其功能,使其更加难忘,但是我将名称连接起来,而不是历史解释本身。
this question的答案,我的问题被简单地关闭,作为重复的,包含很多有趣的背景故事。我的问题有一个不同的重点(如何将else的具体语义与关键字选择连接),但我觉得应该有一个这个问题的链接。

回答:

(这是灵感来自@Mark Tolonen的回答。)
如果条件的计算结果为false,则if语句运行其else子句。
同样地,如果while循环的条件为false,则循环运行else子句。
此规则与您描述的行为相匹配:

  • 在正常执行中,while循环重复运行,直到条件求值为false,因此自然退出循环运行else子句。
  • 当您执行break语句时,您退出循环而不评估该条件,因此该条件无法计算为false,并且您从不运行else子句。
  • 当您执行continue语句时,您将再次评估该条件,并且在循环迭代开始时做出正常的操作。
    所以,如果条件是真的,你保持循环,但如果它是false,你运行else子句。
  • 退出循环的其他方法(例如return)不评估该条件,因此不会运行else子句。

 for循环的行为方式相同。如果迭代器具有更多元素,则将条件视为true,否则为false。

 
 翻译整理: codewenda.com
英文原文:How can I make sense of the `else` statement in Python loops?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

66 − 58 =