Python循環跳出有break和continue,但是每次只能提前結束或中止當前層的循環。可否從內層循環跳出外層循環呢?
Python跳出多層循環的方法可以考慮以下幾種方法:
1.封裝函數,利用return.
2.自定義異常,跳出循環。
3.(本次隨筆的重點)用for...else...語句
for a in xrange(10):
for b in xrange(20):
if something(a, b):
# Break the inner loop...
break
else:
# Continue if the inner loop wasn't broken.
continue
# Inner loop was broken, break the outer.
break
不只是if有,while和for都有else分支。循環體的else分支觸發條件是循環正常結束。如果循環內被break跳出,就不執行else。所以這個邏輯是:如果循環內break了,不觸發else,則執行下一句外層循環中的break;如果正常結束,執行else分支里的continue,直接跳轉到外層循環的下一輪,跳過了第二個break。
【以下程序代碼引自https://blog.csdn.net/churximi/article/details/51043595,僅供學習參考,如有不妥,請聯系我刪除。】
for i in range(5):
for j in range(5):
for k in range(5):
if i == j == k == 3:
break
else:
print(i, '----', j, '----', k)
else: # else1
continue
break # break1
else: # else2
continue
break # break2
【輸出結果】
0 ---- 0 ---- 0
0 ---- 0 ---- 1
0 ---- 0 ---- 2
0 ---- 0 ---- 3
0 ---- 0 ---- 4
0 ---- 1 ---- 0
0 ---- 1 ---- 1
0 ---- 1 ---- 2
0 ---- 1 ---- 3
0 ---- 1 ---- 4
0 ---- 2 ---- 0
0 ---- 2 ---- 1
0 ---- 2 ---- 2
0 ---- 2 ---- 3
0 ---- 2 ---- 4
0 ---- 3 ---- 0
0 ---- 3 ---- 1
0 ---- 3 ---- 2
0 ---- 3 ---- 3
0 ---- 3 ---- 4
0 ---- 4 ---- 0
0 ---- 4 ---- 1
0 ---- 4 ---- 2
0 ---- 4 ---- 3
0 ---- 4 ---- 4
1 ---- 0 ---- 0
1 ---- 0 ---- 1
1 ---- 0 ---- 2
1 ---- 0 ---- 3
1 ---- 0 ---- 4
1 ---- 1 ---- 0
1 ---- 1 ---- 1
1 ---- 1 ---- 2
1 ---- 1 ---- 3
1 ---- 1 ---- 4
1 ---- 2 ---- 0
1 ---- 2 ---- 1
1 ---- 2 ---- 2
1 ---- 2 ---- 3
1 ---- 2 ---- 4
1 ---- 3 ---- 0
1 ---- 3 ---- 1
1 ---- 3 ---- 2
1 ---- 3 ---- 3
1 ---- 3 ---- 4
1 ---- 4 ---- 0
1 ---- 4 ---- 1
1 ---- 4 ---- 2
1 ---- 4 ---- 3
1 ---- 4 ---- 4
2 ---- 0 ---- 0
2 ---- 0 ---- 1
2 ---- 0 ---- 2
2 ---- 0 ---- 3
2 ---- 0 ---- 4
2 ---- 1 ---- 0
2 ---- 1 ---- 1
2 ---- 1 ---- 2
2 ---- 1 ---- 3
2 ---- 1 ---- 4
2 ---- 2 ---- 0
2 ---- 2 ---- 1
2 ---- 2 ---- 2
2 ---- 2 ---- 3
2 ---- 2 ---- 4
2 ---- 3 ---- 0
2 ---- 3 ---- 1
2 ---- 3 ---- 2
2 ---- 3 ---- 3
2 ---- 3 ---- 4
2 ---- 4 ---- 0
2 ---- 4 ---- 1
2 ---- 4 ---- 2
2 ---- 4 ---- 3
2 ---- 4 ---- 4
3 ---- 0 ---- 0
3 ---- 0 ---- 1
3 ---- 0 ---- 2
3 ---- 0 ---- 3
3 ---- 0 ---- 4
3 ---- 1 ---- 0
3 ---- 1 ---- 1
3 ---- 1 ---- 2
3 ---- 1 ---- 3
3 ---- 1 ---- 4
3 ---- 2 ---- 0
3 ---- 2 ---- 1
3 ---- 2 ---- 2
3 ---- 2 ---- 3
3 ---- 2 ---- 4
3 ---- 3 ---- 0
3 ---- 3 ---- 1
3 ---- 3 ---- 2
