Python循環跳出有break和continue,可是每次只能提早結束或停止當前層的循環。能否從內層循環跳出外層循環呢?函數
Python跳出多層循環的方法能夠考慮如下幾種方法:oop
1.封裝函數,利用return.學習
2.自定義異常,跳出循環。spa
3.(本次隨筆的重點)用for...else...語句.net
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.
breakblog
不僅是if有,while和for都有else分支。循環體的else分支觸發條件是循環正常結束。若是循環內被break跳出,就不執行else。因此這個邏輯是:若是循環內break了,不觸發else,則執行下一句外層循環中的break;若是正常結束,執行else分支裏的continue,直接跳轉到外層循環的下一輪,跳過了第二個break。io
【如下程序代碼引自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 ---- 00 ---- 0 ---- 10 ---- 0 ---- 20 ---- 0 ---- 30 ---- 0 ---- 40 ---- 1 ---- 00 ---- 1 ---- 10 ---- 1 ---- 20 ---- 1 ---- 30 ---- 1 ---- 40 ---- 2 ---- 00 ---- 2 ---- 10 ---- 2 ---- 20 ---- 2 ---- 30 ---- 2 ---- 40 ---- 3 ---- 00 ---- 3 ---- 10 ---- 3 ---- 20 ---- 3 ---- 30 ---- 3 ---- 40 ---- 4 ---- 00 ---- 4 ---- 10 ---- 4 ---- 20 ---- 4 ---- 30 ---- 4 ---- 41 ---- 0 ---- 01 ---- 0 ---- 11 ---- 0 ---- 21 ---- 0 ---- 31 ---- 0 ---- 41 ---- 1 ---- 01 ---- 1 ---- 11 ---- 1 ---- 21 ---- 1 ---- 31 ---- 1 ---- 41 ---- 2 ---- 01 ---- 2 ---- 11 ---- 2 ---- 21 ---- 2 ---- 31 ---- 2 ---- 41 ---- 3 ---- 01 ---- 3 ---- 11 ---- 3 ---- 21 ---- 3 ---- 31 ---- 3 ---- 41 ---- 4 ---- 01 ---- 4 ---- 11 ---- 4 ---- 21 ---- 4 ---- 31 ---- 4 ---- 42 ---- 0 ---- 02 ---- 0 ---- 12 ---- 0 ---- 22 ---- 0 ---- 32 ---- 0 ---- 42 ---- 1 ---- 02 ---- 1 ---- 12 ---- 1 ---- 22 ---- 1 ---- 32 ---- 1 ---- 42 ---- 2 ---- 02 ---- 2 ---- 12 ---- 2 ---- 22 ---- 2 ---- 32 ---- 2 ---- 42 ---- 3 ---- 02 ---- 3 ---- 12 ---- 3 ---- 22 ---- 3 ---- 32 ---- 3 ---- 42 ---- 4 ---- 02 ---- 4 ---- 12 ---- 4 ---- 22 ---- 4 ---- 32 ---- 4 ---- 43 ---- 0 ---- 03 ---- 0 ---- 13 ---- 0 ---- 23 ---- 0 ---- 33 ---- 0 ---- 43 ---- 1 ---- 03 ---- 1 ---- 13 ---- 1 ---- 23 ---- 1 ---- 33 ---- 1 ---- 43 ---- 2 ---- 03 ---- 2 ---- 13 ---- 2 ---- 23 ---- 2 ---- 33 ---- 2 ---- 43 ---- 3 ---- 03 ---- 3 ---- 13 ---- 3 ---- 2