许多 Python 程序员可能不知道 while
循环和 for
循环的语法包含一个可选的 else:
子句:
for val in iterable:
do_something(val)
else:
clean_up()
else
子句的主体是执行某些清理操作的好地方,并且在循环正常终止时执行:即,使用 return 或
break
跳过 else
子句; continue
执行后退出。我知道这只是因为我只是looked it up (又一次),因为我不记得 何时 else
子句被执行了。
总是?顾名思义,关于循环的“失败”?定期终止?即使使用 return
退出循环?如果不查,我永远无法完全确定。
我将持续存在的不确定性归咎于关键字的选择:我发现 else
对于这种语义非常难以内存。我的问题不是“为什么将此关键字用于此目的”(我可能会投票关闭,尽管只有在阅读了答案和评论之后),而是 我怎么能想到 else
关键字,以便其语义有意义,因此我可以记住它?
我确信对此进行了相当多的讨论,并且我可以想象做出选择是为了与 try
语句的 else:
子句保持一致(我也必须查找),并且目标是不添加到 Python 的保留字列表中。也许选择 else
的原因会澄清它的功能并使其更容易记住,但我是在将名称与功能联系起来之后,而不是根据历史解释本身。
this question 的答案,我的问题作为副本被简要关闭,包含许多有趣的背景故事。我的问题有不同的重点(如何将 else
的特定语义与关键字选择联系起来),但我觉得应该在某个地方有这个问题的链接。
最佳答案
if
语句在其条件评估为 false 时运行其 else
子句。
同样,如果 while
循环的条件评估为 false,则运行 else 子句。
此规则符合您描述的行为:
break
语句时,您会退出循环而不评估条件,因此条件无法评估为 false,并且您永远不会运行 else 子句。continue
语句时,您将再次评估条件,并完全按照您在循环迭代开始时通常会执行的操作。
因此,如果条件为真,则继续循环,但如果条件为假,则运行 else 子句。return
,不评估条件,因此不运行 else 子句。for
循环的行为方式相同。如果迭代器有更多元素,则认为条件为真,否则为假。
关于python - 如何理解 Python 循环的 `else` 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37642573/