天天看點

python中for循環後面不能加else語句塊_Python 小技巧:for 循環後面接 else 語句

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,執行