当前位置: 首页 > 知识库问答 >
问题:

我怎么能理解Python循环的“其他”子句?

松建本
2023-03-14

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

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

else子句的主体对于某些类型的清理操作来说是一个很好的地方,并且在循环的正常终止时执行:returnbreak退出循环跳过else子句;在继续执行后退出。我之所以知道这一点,只是因为我只是查了一下(再次),因为我永远记不起何时执行else子句。

总是正如名字所暗示的,循环的“失败”是什么?定期终止?即使使用返回退出循环?不查一下,我永远不能完全肯定。

我把我持续的不确定性归咎于关键词的选择:我发现其他的语义学很难记住。我的问题不是“为什么这个关键词被用于这个目的”(我可能会投票结束,尽管只有在阅读了答案和评论之后),而是我如何思考另一些关键词,以便它的语义学有意义,因此我能记住它?

我确信关于这一点已经有了相当多的讨论,并且我可以想象,做出这个选择是为了与try语句的else:子句(我也必须查找该子句)保持一致,并且目标是不将其添加到Python的保留字列表中。也许选择else的原因将阐明它的功能并使它更令人难忘,但我是在将名称与功能联系起来,而不是在历史解释本身之后。

这个问题的答案包含了很多有趣的背景故事,我的问题作为一个复制品简短地结束了。我的问题有不同的重点(如何将else的特定语义与关键字选择联系起来),但我觉得应该在某个地方有一个与这个问题的链接。


共有3个答案

张积厚
2023-03-14
匿名用户

if何时执行else?当其条件为假时。这与while/else完全相同。因此,您可以将while/else视为一个if,它会一直运行其真实条件,直到其计算结果为false。中断不会改变这一点。它只是跳出包含循环,没有任何计算。只有在/条件为false时对进行评估时,才会执行else

是相似的,只是它的假条件耗尽了它的迭代器。

继续中断不执行其他。那不是他们的功能。中断退出包含循环。继续返回到包含循环的顶部,在那里计算循环条件。它是评估if/为false(或for没有更多的项目)的行为,执行其他,没有其他方式。

劳华灿
2023-03-14

最好这样考虑:如果前面的for块中的所有操作都正常,则始终会执行else块,以使其耗尽。

在这个上下文中,右将意味着没有异常,没有中断,没有返回。任何从劫持控件的语句都将导致绕过他人块。

iterable中搜索项目时,会发现一个常见的用例,对于该用例,在找到项目时会取消搜索,或者通过以下else块升起/打印“not found”标志:

for items in basket:
    if isinstance(item, Egg):
        break
else:
    print("No eggs in basket")  

继续不会劫持for的控制,因此在for耗尽后,控制将继续到的其他

陈和裕
2023-03-14

如果if语句的条件计算为false,则该语句将运行其else子句。同样,如果while循环的条件计算为false,则循环将运行else子句。

此规则与您描述的行为相匹配:

  • 在正常执行中,while循环反复运行,直到条件的计算结果为false,因此自然退出循环会运行else子句

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

 类似资料:
  • 我有两个循环。在第一个循环中,我分割字段(分割)。在第二个循环中,我想打印新的字段值。只有0。我想知道循环有什么问题。我没有发现错误。:)我认为问题出在这方面: 我在Windows 7中使用Visual Studio 2013编程。 %lf输出(正确): %f输出(不正确):

  • 问题内容: 许多Python程序员可能没有意识到循环和循环的语法包含一个可选子句: 子句的主体是执行某些类型的清理操作的好地方,并在循环的正常终止时执行:即,使用或跳过子句退出循环;执行后退出。我知道这只是因为我只是看着它(再次),因为我永远记得 当 该子句被执行。 总是?顾名思义,在循环的“失败”上?定期终止吗?即使循环退出?我永远不能完全确定,不查它。 我将不确定性归咎于关键字的选择:我发现这

  • 我正在编写一个Java7Swing应用程序,它调用一个非GUI类来在循环中执行某些操作。不幸的是,当循环运行时,我无法与GUI交互。在该循环中是否可以强制处理GUI事件? 我正在搜索一些内容,告诉JVM在继续循环之前处理其他GUI事件(如按钮单击)。

  • 如果我的问题看起来很长,我道歉。我会尽量简明扼要。 问题:编写一个程序,将以千克为单位的估算重量转换为磅。如果用户输入负值,程序应要求玩家重新输入数字。 我创建了三个函数。第一个函数-返回玩家输入第二个函数-返回以磅为单位的权重第三个函数-如果权重为正,返回以磅为单位的值,或者如果值为负,要求另一个输入。 如果相同的值为正数,我的程序将返回正确的值。然而,当我输入一个负浮点数时,我的程序将永远打印

  • 问题内容: 在Python中,这里描述了一种有效的for else循环实现 示例代码: 在Java中,我需要编写更多代码来实现相同的行为: 在Java中,还有没有比Python更出色的实现else循环的实现? 问题答案: 这样做是这样的:

  • 我试着用Java画一个长方形。我设置框架大小(800400)和可调整大小(假)矩形的x=50,y=50宽度=700高度=300。为什么不在中间呢?非常感谢。

  • 这里已经有很多问题了,但我还是会继续。这是一个简单的脑力操翻译。我想出了所有其他符号,但我不知道如何实现循环。有人能帮忙吗? 我有一种感觉,我需要使用Stack,但我似乎不知道如何使用。我以前构建过表达式计算器。。。这需要同样的逻辑吗?