在業務邏輯中有時候會遇到兩層for迴圈的情況,觸發某些條件時,需要直接退出兩層for迴圈 而python官方是沒有 goto 語句的那麼我們可以這樣實現 第一種定義變數flag,根據flag的值做退出 flag=True for i in range(10): for j in range(10): ...
在業務邏輯中有時候會遇到兩層for迴圈的情況,觸發某些條件時,需要直接退出兩層for迴圈
而python官方是沒有 goto 語句的那麼我們可以這樣實現
第一種定義變數flag,根據flag的值做退出
flag=True
for i in range(10):
for j in range(10):
if i+j>15 :
print(i, j)
flag=False
break
if not flag:
break
第二種,在方法內用return
def ttt():
for i in range(10):
for j in range(10):
if i+j>15 :
print(i, j)
return
ttt()
第三種,Python的for迴圈有else關鍵字,可以利用else和 comtinue、break跳出迴圈
def ttt():
for i in range(10):
for j in range(10):
if i+j>15 :
print(i, j)
break
else:
continue
break
ttt()
這段代碼什麼意思呢 python裡面for...else...表示如果這個迴圈正常的走完了則會執行else裡面的代碼,異常退出則不會執行,我們對內層迴圈做判斷,符合條件了break則記憶體迴圈異常退出,對應的else也不會執行,然後再下一行是break完成外層迴圈的退出
第四種,我們也可以利用拋出異常來退出
class over_loop(Exception): pass
def ttt():
try:
for i in range(10):
for j in range(10):
if i + j > 15:
print(i, j)
raise over_loop()
except over_loop:
pass
#學習中遇到問題沒人解答?小編創建了一個Python學習交流群:711312441
ttt()
這段代碼是這樣的,首先定義一個異常類,在迴圈中判斷符合條件就拋出這個異常類,然後外層用try...except...包裹住,如果接收到是自己定義的這個異常類就pass掉完成函數或者迴圈的退出
代碼沒有好壞,只有合適,也許在某些業務邏輯下,後兩種更好用一點。這個for...else...是一個巧思,雖然他本質還是一層一層退出,但是利用其break結束迴圈之後else就不會執行。也是個很新奇的做法。