如何理解 Python 循环的“else”子句?

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

for val in iterable:

do_something(val)

else:

clean_up()

子句的主体else是某些类型的清理动作的好地方,并且在循环正常终止时执行:即,退出循环returnbreak跳过else子句;continuea执行后退出。我知道这一点只是因为我刚刚查了一下(又一次),因为我永远记不起该子句 何时执行。else

总是?顾名思义,关于循环的“失败”?定期终止?即使循环退出return? 如果不查,我永远无法完全确定。

我将我持续的不确定性归咎于关键字的选择:我发现else这种语义非常难以记忆。我的问题不是“为什么将此关键字用于此目的”(我可能会投票关闭,尽管只有在阅读了答案和评论之后),而是

我确信对此进行了相当多的讨论,我可以想象做出选择是为了与try声明的else:条款(我也必须查找)保持一致,并且目标是不添加到列表中Python

的保留字。也许选择的原因else会澄清它的功能并使其更令人难忘,但我是在将名称与功能联系起来之后,而不是根据历史解释本身。

这个问题的答案(我的问题作为副本被简要关闭)包含许多有趣的背景故事。我的问题有不同的重点(如何将特定语义else与关键字选择联系起来),但我觉得应该在某个地方有这个问题的链接。

回答:

带有子句的while语句else

while condition:

suite

else:

exhausted

完全等同于

while True:

if not condition:

exhausted

break

suite

带有子句的for语句else

for item in iterable:

suite

else:

exhausted

完全等同于

iterator = iter(iterable)

try:

while True:

item = next(iterator)

suite

except StopIteration:

exhausted

它有助于理解套件语句中的breakor语句的效果。continue

注意 :对于不带子句的whileand语句,将用尽的语句替换为等效代码中的语句。for``else``pass

为了记住else子句的含义,您可以将循环语句解释为

if loop_breaks:

pass

else:

exhausted

以上是 如何理解 Python 循环的“else”子句? 的全部内容, 来源链接: www.h5w3.com/z/754549.html

回到顶部