我同意,它更像是一个'elif not[条件(s)提高中断]'。
我知道这是一个老话题,但我现在正在研究同样的问题,我不确定是否有人能以我理解的方式抓住这个问题的答案。
对我来说,有三种方法来“阅读”For…else or While…所有等价的Else语句是:
Else ==如果循环正常完成(没有中断或错误)
Else ==如果循环没有遇到断点
Else == Else not(条件引发中断)(假设存在这样的条件,否则就不会有循环)
因此,从本质上讲,循环中的“else”实际上是一个“elif…”,其中'…’表示(1)不中断,相当于(2)NOT[条件(s)引发中断]。
我认为关键在于,如果没有break, else是没有意义的,所以for…其他的包括:
for:
do stuff
conditional break # implied by else
else not break:
do more stuff
a的基本元素。else循环如下所示,你可以用更简单的英语阅读它们:
for:
do stuff
condition:
break
else: # read as "else not break" or "else not condition"
do more stuff
正如其他帖子所说,当你能够找到你的循环正在寻找的东西时,通常会引发一个break,所以else:变成了“如果目标物品没有找到,该怎么办”。
例子
您还可以同时使用异常处理、中断和for循环。
for x in range(0,3):
print("x: {}".format(x))
if x == 2:
try:
raise AssertionError("ASSERTION ERROR: x is {}".format(x))
except:
print(AssertionError("ASSERTION ERROR: x is {}".format(x)))
break
else:
print("X loop complete without error")
结果
x: 0
x: 1
x: 2
ASSERTION ERROR: x is 2
----------
# loop not completed (hit break), so else didn't run
例子
一个简单的例子,断点被击中。
for y in range(0,3):
print("y: {}".format(y))
if y == 2: # will be executed
print("BREAK: y is {}\n----------".format(y))
break
else: # not executed because break is hit
print("y_loop completed without break----------\n")
结果
y: 0
y: 1
y: 2
BREAK: y is 2
----------
# loop not completed (hit break), so else didn't run
例子
没有中断的简单示例,没有引发中断的条件,也没有遇到错误。
for z in range(0,3):
print("z: {}".format(z))
if z == 4: # will not be executed
print("BREAK: z is {}\n".format(y))
break
if z == 4: # will not be executed
raise AssertionError("ASSERTION ERROR: x is {}".format(x))
else:
print("z_loop complete without break or error\n----------\n")
结果
z: 0
z: 1
z: 2
z_loop complete without break or error
----------