1

我不确定该语句在带有子句continue的循环内时如何解释。forelse

如果条件为真,break则将退出for循环并且else不执行部分。如果条件为 False,则else部分将被执行。

但是,continue声明呢?我测试了似乎在continue到达语句之后,该else部分将被执行。这是真的??这是一个代码示例:

# when condition found and it's `true` then `else` part is executing :

edibles = ["ham", "spam", "eggs","nuts"]
for food in edibles:
    if food == "spam":
        print("No more spam please!")
        continue
    print("Great, delicious " + food)

else:
    print("I am so glad: No spam!")
print("Finally, I finished stuffing myself")`

如果我从列表中删除“垃圾邮件”,现在条件总是false并且从未找到,但仍然else执行该部分:

edibles = ["ham","eggs","nuts"]
for food in edibles:
    if food == "spam":
        print("No more spam please!")
        continue
    print("Great, delicious " + food)

else:
    print("I am so glad: No spam!")
print("Finally, I finished stuffing myself")
4

2 回答 2

5

for在 Python 中使用循环,else当循环正常结束时执行块,即没有break语句。Acontinue不会影响它。

如果 for 循环由于break语句而结束,则elseblock 将不会执行。如果循环正常退出(否break),则将else执行该块。

文档

当与循环一起使用时,else 子句与 try 语句的 else 子句相比与 if 语句有更多的共同点:try 语句的 else 子句在没有异常发生时运行,而循环的 else 子句在没有中断发生时运行.

我一直记得它,因为 Raymond Hettinger 是如何描述它的。他说应该调用它nobreak而不是else. (这也是一个很好的视频,它解释了 for-else 构造的有用性)

例子:

numbers = [1,2,3]
for number in numbers:
    if number == 4:
        print("4 was found")
        break
else:
    print("4 was not found")

当您运行上面的代码时,由于4不在列表中,因此循环不会break并且else子句将打印出来。如果您添加4到列表并再次运行它,它将break不会else打印。在大多数其他语言中,如果找到 a ,则必须添加一些哨兵布尔值foundTrue然后4仅在循环后打印语句 if foundis False

于 2016-10-02T09:47:38.350 回答
2

你的else部分将在这两种情况下执行。 else未找到条件时循环终止时执行的部分。这就是您的代码中发生的事情。但它也可以在没有continue声明的情况下工作。

现在break语句的else部分怎么样,break语句的else部分只有在以下情况下才会执行:

  • 如果循环正常完成而没有任何中断。
  • 如果循环没有遇到中断。

在此处输入图像描述

于 2016-10-02T09:45:47.497 回答