for--else大坑问题

2022-10-15

这是一次偶然发现的问题,做一下记录

a = [{'w0', 'b0', 'v0'}, {'w1', 'b1', 'v1'}, {'w2', 'b2', 'v2'}]

for i in a:
for j in i:
print(j, '我是内循环')
else:
print(j, '我是else')

上面这个代码大家都知道他会内循环完执行else,下面是运行结果

b0 我是内循环
w0 我是内循环
v0 我是内循环
v0 我是else
v1 我是内循环
b1 我是内循环
w1 我是内循环
w1 我是else
w2 我是内循环
b2 我是内循环
v2 我是内循环
v2 我是else 进程已结束,退出代码 0

但是当我们在else里加判断结束语句

for i in a:
for j in i:
print(j, '我是内循环')
else:
print(j, '我是else')
if True:
break

执行结果如下:

w0 我是内循环
b0 我是内循环
v0 我是内循环
v0 我是else 进程已结束,退出代码 0

也就是说for--else的else语句里面break结束的是外层循环

那么如果我们在else里进行for--else嵌套,else所break的是哪一个呢?

a = [{'w0', 'b0', 'v0'}, {'w1', 'b1', 'v1'}, {'w2', 'b2', 'v2'}]
for i in a:
print(i, '我是最外层循环,top')
for j in i:
print(j, '我是内循环')
else:
for k in a:
print(k, '我是else内内循环')
else:
for v in k:
print(v, '我是else内内内循环')
else:
if True:
break

输出结果:

{'v0', 'b0', 'w0'} 我是最外层循环,top
v0 我是内循环
b0 我是内循环
w0 我是内循环
{'v0', 'b0', 'w0'} 我是else内内循环
{'v1', 'w1', 'b1'} 我是else内内循环
{'w2', 'v2', 'b2'} 我是else内内循环
w2 我是else内内内循环
v2 我是else内内内循环
b2 我是else内内内循环 进程已结束,退出代码 0

总结就是for循环里不管内嵌循环多少层,for--else里面的else语句如果break那么都是结束最外层的那个for循环

for--else大坑问题的相关教程结束。

《for--else大坑问题.doc》

下载本文的Word格式文档,以方便收藏与打印。