python - 如何理解 Python 循环的 `else` 子句?

许多 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 子句。

此规则符合您描述的行为:

  • 在正常执行中,while 循环会重复运行,直到条件评估为 false,因此自然退出循环会运行 else 子句。
  • 当您执行 break 语句时,您会退出循环而不评估条件,因此条件无法评估为 false,并且您永远不会运行 else 子句。
  • 当您执行 continue 语句时,您将再次评估条件,并完全按照您在循环迭代开始时通常会执行的操作。 因此,如果条件为真,则继续循环,但如果条件为假,则运行 else 子句。
  • 退出循环的其他方法,例如 return,不评估条件,因此不运行 else 子句。

for 循环的行为方式相同。如果迭代器有更多元素,则认为条件为真,否则为假。

关于python - 如何理解 Python 循环的 `else` 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37642573/

相关文章:

linux - 如何从我的应用程序目录中删除所有 .svn 目录

python - 如何在 Python3 中将 'binary string' 转换为普通字符串?

linux - 从 grep 中排除 .svn 目录

python - 出错时自动启动 python 调试器

linux - 有效地测试一个端口是否在 Linux 上打开?

linux - 创建 zip 文件并忽略目录结构

python - 如何在类中调用函数?

python - 如何在 Python 中分析内存使用情况?

linux - 在 Bash 的文件路径参数中获取最后一个目录名/文件名

python - 在 pandas DataFrame 中查找列的值最大的行