还有什么部分在继续声明中工作?

时间:2016-10-02 09:38:01

标签: python for-loop for-else

我不确定当continue语句位于带有for子句的else循环中时如何解释它。

如果条件为真,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")

2 个答案:

答案 0 :(得分:4)

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

如果for循环因break语句而结束,则else块将不会执行。如果循环正常退出(无break),则将执行else块。

来自docs

  

当与循环一起使用时,else子句与try语句的else子句的共同点多于if语句的子句:try语句的else子句在没有异常发生时运行,并且循环的else子句运行时没有休息。

我总是记得因为Raymond Hettinger describes it。他说应该叫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。在大多数其他语言中,您必须添加一些像found这样的标记布尔值,如果找到True则将其设为4,然后只在found之后打印循环后的语句是False

答案 1 :(得分:2)

您的else部分将在两种情况下执行。 else部分在循环终止时执行,当条件没有找到时。你的代码中发生了什么。但是如果没有continue语句,它也会一样。

现在假设break语句的其他部分,Break语句的else部分仅在以下情况下执行:

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

enter image description here