欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 中的 else詳解

 更新時間:2016年04月23日 16:26:57   投稿:hebedich  
這篇文章主要介紹了Python 中的 else詳解的相關(guān)資料,需要的朋友可以參考下

我們都知道 Python 中else的基本用法是在條件控制語句中的 if...elif...else...,但是 else 還有兩個其它的用途,一是用于循環(huán)的結(jié)尾,另一個是用在錯誤處理的 try 中。這原本是 Python 的標準語法,但由于和大部分其它編程語言的習(xí)慣不太一樣,致使人們有意或無意地忽略了這些用法。另外,對于這些用法是否符合 0×00 The Zen of Python 的原則以及該不該廣泛使用也存在很多爭議。例如在我看到的兩本書里(Effective Python VS Write Idiomatic Python),兩位作者就分別對其持有截然不同的態(tài)度。

循環(huán)中的 else

跟在循環(huán)后面的 else 語句只有在當(dāng)循環(huán)內(nèi)沒出現(xiàn) break,也就是正常循環(huán)完成時才會執(zhí)行。首先我們來看一個插入排序法的例子:

from random import randrange
def insertion_sort(seq):
  if len(seq) 1:
    return seq
  _sorted = seq[:1]
  for i in seq[1:]:
    inserted = False
    for j in range(len(_sorted)):
      if i _sorted[j]:
        _sorted = [*_sorted[:j], i, *_sorted[j:]]
        inserted = True
        break
    if not inserted:
      _sorted.append(i)
  return _sorted
 
print(insertion_sort([randrange(1, 100) for i in range(10)]))

[8, 12, 12, 34, 38, 68, 72, 78, 84, 90]

在這個例子中,對已排序的 _sorted 元素逐個與 i 進行比較,若 i 比已排序的所有元素都大,則只能排在已排序列表的最后。這時我們就需要一個額外的狀態(tài)變量 inserted 來標記完成遍歷循環(huán)還是中途被 break,在這種情況下,我們可以用 else 來取代這一狀態(tài)變量:

def insertion_sort(seq):
  if len(seq) 1:
    return seq
  _sorted = seq[:1]
  for i in seq[1:]:
    for j in range(len(_sorted)):
      if i _sorted[j]:
        _sorted = [*_sorted[:j], i, *_sorted[j:]]
        break
    else:
      _sorted.append(i)
  return _sorted
print(insertion_sort([randrange(1, 100) for i in range(10)]))

[1, 10, 27, 32, 32, 43, 50, 55, 80, 94]

我認為這是一個非??岬淖龇?!不過要注意的是,除了 break 可以觸發(fā)后面的 else 語句,沒有循環(huán)的時候也會:

while False:
  print("Will never print!")
else:
  print("Loop failed!")


Loop failed!

錯誤捕捉中的 else

try...except...else...finally 流程控制語法用于捕捉可能出現(xiàn)的異常并進行相應(yīng)的處理,其中 except 用于捕捉 try 語句中出現(xiàn)的錯誤;而 else 則用于處理沒有出現(xiàn)錯誤的情況;finally 負責(zé) try 語句的”善后工作“ ,無論如何都會執(zhí)行??梢酝ㄟ^一個簡單的例子來展示:

def divide(x, y):
  try:
    result = x / y
  except ZeroDivisionError:
    print("division by 0!")
  else:
    print("result = {}".format(result))
  finally:
    print("divide finished!")
divide(5,2)
print("*"*20)
divide(5,0)


result = 2.5
divide finished!
********************
division by 0!
divide finished!

當(dāng)然,也可以用狀態(tài)變量的做法來替代 else:

def divide(x, y):
  result = None
  try:
    result = x / y
  except ZeroDivisionError:
    print("division by 0!")
  if result is not None:
    print("result = {}".format(result))
  print("divide finished!")
 
divide(5,2)
print("*"*20)
divide(5,0)


result = 2.5
divide finished!
********************
division by 0!
divide finished!

總結(jié)

有人覺得 else 的這些用法違反直覺或者是 implicit 而非 explicit,不值得提倡。但我覺得這種”判決“需要依賴具體的應(yīng)用場景以及我們對 Python 的理解,并非一定要對新人友好的語法才算是 explicit 的。當(dāng)然也不推薦在所有地方都使用這個語法,for/while...else 最大的缺點在于 else 是需要與 for/file 對齊的,如果是多層嵌套或者循環(huán)體太長的情況,就非常不適合用 else(回憶一下游標卡尺的梗就知道了:P)。只有在一些簡短的循環(huán)控制語句中,我們通過 else 擺脫一些累贅的狀態(tài)變量,這才是最 Pythonic 的應(yīng)用場景!

相關(guān)文章

  • 單身狗福利?Python爬取某婚戀網(wǎng)征婚數(shù)據(jù)

    單身狗福利?Python爬取某婚戀網(wǎng)征婚數(shù)據(jù)

    今天我就當(dāng)回媒婆,給男性程序員來點福利.今天目標爬取征婚網(wǎng)上呈現(xiàn)出來的女生信息保存成excel表格供大家篩選心儀的女生,需要的朋友可以參考下
    2021-06-06
  • PyCharm 專業(yè)版安裝圖文教程

    PyCharm 專業(yè)版安裝圖文教程

    這篇文章主要介紹了PyCharm 專業(yè)版安裝圖文教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Python畫圖常用代碼總結(jié)大全(20個畫圖代碼現(xiàn)拿現(xiàn)用)

    Python畫圖常用代碼總結(jié)大全(20個畫圖代碼現(xiàn)拿現(xiàn)用)

    Python是一種高級編程語言,擁有豐富的圖形庫,可以完成繪制各種類型的圖形任務(wù),下面這篇文章主要給大家介紹了關(guān)于Python畫圖常用代碼的相關(guān)資料,文中介紹的這20個畫圖代碼可以現(xiàn)拿現(xiàn)用,需要的朋友可以參考下
    2023-06-06
  • Python threading模塊condition原理及運行流程詳解

    Python threading模塊condition原理及運行流程詳解

    這篇文章主要介紹了Python threading模塊condition原理及運行流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Python實現(xiàn)求解斐波那契第n項的解法(包括矩陣乘法+快速冪)

    Python實現(xiàn)求解斐波那契第n項的解法(包括矩陣乘法+快速冪)

    這篇文章主要介紹怎么使用Python求解斐波那契第n項,方法多樣,邏輯清晰,代碼簡單詳細,有這方面需要的朋友可以參考下
    2021-04-04
  • 對Pandas DataFrame缺失值的查找與填充示例講解

    對Pandas DataFrame缺失值的查找與填充示例講解

    今天小編就為大家分享一篇對Pandas DataFrame缺失值的查找與填充示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python與Appium實現(xiàn)手機APP自動化測試的示例代碼

    Python與Appium實現(xiàn)手機APP自動化測試的示例代碼

    本文主要介紹了Python與Appium實現(xiàn)手機APP自動化測試的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • python實現(xiàn)獲取當(dāng)前設(shè)備的地點位置

    python實現(xiàn)獲取當(dāng)前設(shè)備的地點位置

    這篇文章主要介紹了python實現(xiàn)獲取當(dāng)前設(shè)備的地點位置,電腦如何獲取當(dāng)前所處的地理位置?它不會像我們一樣對地理位置有感性的認知,它只認識數(shù)據(jù),簡言之,電腦可以通過獲取當(dāng)前連接的公網(wǎng)IP,反推所處的位置環(huán)境,需要的朋友可以參考一下
    2022-03-03
  • 在Linux命令行中運行Python腳本的流程步驟

    在Linux命令行中運行Python腳本的流程步驟

    Python是一種高級編程語言,被廣泛應(yīng)用于數(shù)據(jù)科學(xué)、機器學(xué)習(xí)、Web 開發(fā)等領(lǐng)域,在Linux操作系統(tǒng)中,Python是一個默認安裝的解釋器,用戶可以通過命令行界面(CLI)來運行Python腳本,在本文中,我們將詳細介紹如何在Linux命令行中運行Python腳本,需要的朋友可以參考下
    2023-11-11
  • Appium+Python實現(xiàn)簡單的自動化登錄測試的實現(xiàn)

    Appium+Python實現(xiàn)簡單的自動化登錄測試的實現(xiàn)

    這篇文章主要介紹了Appium+Python實現(xiàn)簡單的自動化登錄測試的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論