首頁 > 後端開發 > Python教學 > For-else:Python中一個奇怪但有用的特性

For-else:Python中一個奇怪但有用的特性

王林
發布: 2023-04-13 20:43:01
轉載
1367 人瀏覽過

For-else:Python中一個奇怪但有用的特性

導語

無論使用哪一種程式語言,我們都會寫「if-else」語句,但是「for-else」呢?

對許多語言來說,例如 C、C 和 Java,在一個循環後使用「else」是完全錯誤的。然而 Python 作為一門優雅的語言,擁有這個「奇怪但有用」的特性。如果使用得當,我們的程式碼會變得更加整潔。

本文將介紹 Python 中的「for-else」功能,並透過簡單的範例說明如何正確地使用它。

有關「For-Else」功能的基礎知識

當第一次遇到「for-else」這個特性時,它會看起來很奇怪而且難以理解(Python開發者首頁君剛開始用到這個功能時,很容易誤以為else 縮排錯了)。但實際上,它的用法卻出乎意料的簡單。一句話就足以說明:程式碼中的「else」區塊僅在循環中沒有中斷時執行。

聽起來有點太簡單而顯得不真實?讓我們透過一個例子來看看:

leaders = ["Elon", "Tim", "Warren"]
for i in leaders:
 if i == "Yang":
 print("Yang is a leader!")
 break
else:
 print("Not found Yang!")
# Not found Yang!
登入後複製

如上所示:如上所示,leaders 清單中不包含“Yang”,故我們的 for 迴圈中沒有中斷。因此“else”區塊執行並列印了資訊。

如果 leaders 清單中包含“Yang”,會如何呢?

leaders = ["Yang", "Elon", "Tim", "Warren"]
for i in leaders:
 if i == "Yang":
 print("Yang is a leader!")
 break
else:
 print("Not found Yang!")
# Yang is a leader!
登入後複製

如上所示,由於leaders 清單中包含“Yang”,for 迴圈中斷,因此「else」區塊中的內容沒有執行。

簡而言之,for-else 特性本身並不難理解,但是正確而熟練地使用它並不容易。以下我們來介紹三種適合使用 for-else 特性的場景。

使用 For-Else 功能的 3 個場景

我們不一定必須在 Python 程式中使用 for-else 這個特性。老實說,沒有它我們也可以做同樣的事情,但是使用它可以使我們的程式碼更加優雅。

1.進行迭代並找出沒有被標記的元素

迭代列表以尋找特定的元素是使用循環的基本場景。通常當我們找到目標元素後,繼續迭代是沒有意義的,我們需要跳出循環。問題是:我們如何知道該元素是否被找到?

傳統的解決方案是定義一個「標記」變量,並在我們找到特定項目時將其設為 True。

leaders = ["Yang", "Elon", "Tim", "Warren"]
have_yang = False
for i in leaders:
 if i == "Yang":
 have_yang = True
 # Do something
 break
if have_yang == False: # no yang
 ...# Do others
登入後複製

如上例所示,have_yang 變數就是一個標誌。在 for 迴圈運行完成後,如果它的值是 False,我們就知道清單中沒有“Yang”,而後可以做一些其他的操作。

這種方法已經夠好了,但如果你想利用Python 的「優雅」特性,使用for-else 就是另一個選擇:

leaders = ["Yang", "Elon", "Tim", "Warren"]
for i in leaders:
 if i == "Yang":
 have_yang = True
 # Do something
 break
else:# no yang
 ...# Do others
登入後複製

這種寫法看起來更整潔,對吧?

2. 用於跳出巢狀迴圈

當程式碼中存在巢狀循環時,for-else 也可以提供協助。

for i in range(5):
 for j in range(5):
 if j == 2 and i == 0:
 break
 if not (j == 2 and i == 0):
 continue
break
登入後複製

如上所示,跳出巢狀循環有一點困難,因為我們必須知道內部循環是否被跳出。

上面的程式碼展示了一個笨拙的解決方案來確定內部循環是否已經中斷。它當然可以正常工作,但我們可以透過使用for-else 來使其更整潔:

# use the for-else syntax
for i in range(5):
 for j in range(5):
 if j == 2 and i == 0:
 break
 else:# only execute when it's no break in the inner loop
 continue
 break
登入後複製

3.協助處理異常

nums = [1, 3, 0, 5]
for denominator in nums:
 try:
 20/denominator
 except ZeroDivisionError:
 break
else:# no found ZeroDivisionError
 ...# Do others
登入後複製

如上所示,如果for 循環中沒有出現ZeroDivisionError,我們可以在「else」區塊中進行對應的後續操作。

總結

Python 中的for-else 特性乍一看會有些奇怪,但是它的用法並不難理解,並且在某些場景下可以發揮其用處。畢竟,我們只需要記住一條規則:「else」區塊僅在循環中沒有中斷時執行。

以上是For-else:Python中一個奇怪但有用的特性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板