我不确定当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")
答案 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)