我了解此构造的工作原理:
for i in range(10):
print(i)
if i == 9:
print("Too big - I'm giving up!")
break
else:
print("Completed successfully")
但我不明白为什么 else
在这里用作关键字,因为它表明有问题的代码仅在 for
块未完成时运行,这与什么相反确实如此!无论我怎么想,我的大脑都无法从 for
语句无缝地前进到 else
块。对我来说, continue
或 continuewith
会更有意义(我正在努力训练自己这样阅读)。
我想知道 Python 编码人员如何在他们的脑海中阅读这个结构(或者大声朗读,如果你愿意的话)。也许我遗漏了一些可以使此类代码块更容易破译的东西?
这个问题是关于 底层设计决策 的,即 为什么能够编写这段代码是有用 的。有关 语法含义 的具体问题,另请参阅 Python while 语句中的 Else 子句。
原文由 Kent Boogaart 发布,翻译遵循 CC BY-SA 4.0 许可协议
即使对于经验丰富的 Python 编码人员来说,它也是一种奇怪的结构。当与 for 循环结合使用时,它基本上意味着“在可迭代对象中找到一些项目,否则如果没有找到就做……”。如:
但是无论何时你看到这个结构,一个更好的选择是将搜索封装在一个函数中:
或者使用列表理解:
它在语义上不等同于其他两个版本,但在非性能关键代码中工作得很好,在这些代码中无论您是否迭代整个列表都无关紧要。其他人可能不同意,但我个人会避免在生产代码中使用 for-else 或 while-else 块。
另见 [Python-ideas] for…else 线程总结