首頁 > 軟體

如何在Python中用好短路機制

2022-02-18 13:04:17

不同於物理學中的「短路」(Short circuit)那般危險,Python中的短路機制非常有用,跟很多其他程式語言中的短路機制作用類似,一句話概括就是一段條件判斷表示式在從左到右按順序執行的過程中,提前確定了表示式的True/False結果,從而終止右邊剩餘的運算。

讓我們通過幾個簡單的例子總結Python中可用的幾種短路機制:

1.X or Y

X or Y是最常用的短路機制,我們都知道只要X或Y中至少有一個為True時,整段判斷表示式就為True,譬如下面的例子中,本來1 / 0會觸發ZeroDivisionError: division by zero錯誤,但因為or左邊的部分已經邏輯判斷為True,Python的短路機制就會停止後續的執行,直接返回or左邊的結果:

而當or左邊部分邏輯判斷為False時,則會返回右邊部分的結果:

2.X and Y

類似X or Y的機制,X and Y會在X邏輯判斷為False時提前終止後續的運算,只返回X部分的結果:

3.any()

Python中的any()函數用於接受序列形式的多個等待邏輯判斷的部分,並在序列中至少有一個部分邏輯判斷為True時返回True。

而只要any()按順序遇到第一個邏輯判斷為True的結果,也會觸發短路,正如下面的例子中只花費3秒就完成了判斷過程,因為迴圈到1時觸發了短路:

4.all()

Python中的all()函數類似any(),會在傳入序列中每個部分邏輯判斷均為True時返回True,其也會在按順序遇到第一個False時終止後續運算:

4.1「比較運運算元」

Python中用於數值大小比較的各個運運算元也具有短路機制,從左到右,一旦執行到判斷結果為False的部分都會終止運算:

4.2「實際使用範例」

當我們的程式碼中涉及到條件判斷,且參與條件判斷的值具有一定的「運算成本」時,就可以靈活運用短路機制來提升執行效率,譬如我們需要根據使用者id資訊向多個介面查詢其許可權,全部滿足時將其標記為“超級許可權”,就可以利用到短路機制。

這裡我們隨意寫幾個具有時間成本的函數作為介面示意:

def api1(id_):
    
    time.sleep(1)
    
    return id_ in ['admin1', 'admin2']

def api2(id_):
    
    time.sleep(1)
    
    return id_ in ['admin1', 'admin2', 'su1', 'su2']

def api3(id_):
    
    time.sleep(1)
    
    return id_ not in ['ban1', 'ban2', 'ban3']

利用短路機制在使用者第一次沒有滿足條件時就終止後續判斷,寫法簡潔:

到此這篇關於如何在Python中用好短路機制的文章就介紹到這了,更多相關Python中妙用短路機制內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com