https://blog.csdn.net/u012814856/article/details/78723071
這裡寫自定義目錄标題
一、引言
我在學習 《Python Algorithms 2nd》的時候,在第 18 頁看到了這樣一段代碼:
def sort_w_check(seq):
n = len(seq)
for i in range(n-1):
if seq[i] > seq[i+1]
break
else:
return
…
1
2
3
4
5
6
7
8
上述代碼,是用來進行排序的,其中排序的内容以 … 代替省略了,我們主要觀察前面一段代碼。
其中 for 循環中依次進行了元素的比較,當發現有前一個元素的值大于了後一個元素的值,就執行 break 退出 for 循環。
然而,比較迷惑人的地方來,這個 else 語句是什麼作用呢?
從 C++ 轉過來的我,從來沒有在除了 if 或者 else if 的後面看到過 else 語句,難道 Python 在這一點上有什麼特别的文法規則嗎?
二、實驗
讓我們來做點實驗:
在指令視窗輸入以下代碼
else:
1
發現報錯:
File “”, line 1
else:
^
SyntaxError: invalid syntax
得出結論:else 語句是不能脫離其他語句單獨存在的。
繼續在指令視窗輸入以下代碼
for i in range(3):
print(i)
else:
print(‘else content’)
1
2
3
4
輸出:
1
2
else content
得出結論:for 循環正常執行結束後,else 語句裡面的内容也會正常執行。
繼續在指令視窗輸入以下代碼
for i in range(3):
break
else:
print(‘else content’)
1
2
3
4
輸出:
得出結論:當 for 循環被 break 中斷後,其後的 else 語句就不執行了。
三、總結
通過我們上述的實驗,我們再回到引言裡面的那段代碼,其意義也就一目了然了:
當 seq 中的元素全部都是升序排序好了的,那麼 for 循環裡面的 break 語句是執行不到的,按照我們上述實驗中的第 2 點結論來看,我們會預設執行 else 中的 return 語句,正好契合了已經排好序的 seq 不進行處理的設計理念(這裡大贊一個)
當 seq 中的元素有未按照升序排序好的地方,必然會執行到 break 語句,此時其後的 else 語句就不會執行了,正好去執行後面的排序代碼邏輯
标簽:語句,seq,Python,代碼,else,break,執行