如何在Python中用好短路機(jī)制
不同于物理學(xué)中的「短路」(Short circuit)那般危險,Python中的短路機(jī)制非常有用,跟很多其他編程語言中的短路機(jī)制作用類似,一句話概括就是一段條件判斷表達(dá)式在從左到右按順序執(zhí)行的過程中,提前確定了表達(dá)式的True/False結(jié)果,從而終止右邊剩余的運算。
讓我們通過幾個簡單的例子總結(jié)Python中可用的幾種短路機(jī)制:
1.X or Y
X or Y是最常用的短路機(jī)制,我們都知道只要X或Y中至少有一個為True時,整段判斷表達(dá)式就為True,譬如下面的例子中,本來1 / 0會觸發(fā)ZeroDivisionError: division by zero
錯誤,但因為or左邊的部分已經(jīng)邏輯判斷為True,Python的短路機(jī)制就會停止后續(xù)的執(zhí)行,直接返回or左邊的結(jié)果:
而當(dāng)or左邊部分邏輯判斷為False時,則會返回右邊部分的結(jié)果:
2.X and Y
類似X or Y的機(jī)制,X and Y會在X邏輯判斷為False時提前終止后續(xù)的運算,只返回X部分的結(jié)果:
3.any()
Python
中的any()
函數(shù)用于接受序列形式的多個等待邏輯判斷的部分,并在序列中至少有一個部分邏輯判斷為True時返回True。
而只要any()
按順序遇到第一個邏輯判斷為True的結(jié)果,也會觸發(fā)短路,正如下面的例子中只花費3秒就完成了判斷過程,因為循環(huán)到1時觸發(fā)了短路:
4.all()
Python中的all()函數(shù)類似any(),會在傳入序列中每個部分邏輯判斷均為True時返回True,其也會在按順序遇到第一個False時終止后續(xù)運算:
4.1「比較運算符」
Python中用于數(shù)值大小比較的各個運算符也具有短路機(jī)制,從左到右,一旦執(zhí)行到判斷結(jié)果為False的部分都會終止運算:
4.2「實際使用示例」
當(dāng)我們的代碼中涉及到條件判斷,且參與條件判斷的值具有一定的「運算成本」時,就可以靈活運用短路機(jī)制來提升運行效率,譬如我們需要根據(jù)用戶id信息向多個接口查詢其權(quán)限,全部滿足時將其標(biāo)記為“超級權(quán)限”,就可以利用到短路機(jī)制。
這里我們隨意寫幾個具有時間成本的函數(shù)作為接口示意:
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']
利用短路機(jī)制在用戶第一次沒有滿足條件時就終止后續(xù)判斷,寫法簡潔:
到此這篇關(guān)于如何在Python中用好短路機(jī)制的文章就介紹到這了,更多相關(guān)Python中妙用短路機(jī)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pandas刪除某行或某列數(shù)據(jù)的實現(xiàn)示例
本文主要介紹了pandas刪除某行或某列數(shù)據(jù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08在python plt圖表中文字大小調(diào)節(jié)的方法
今天小編就為大家分享一篇在python plt圖表中文字大小調(diào)節(jié)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07python在windows調(diào)用svn-pysvn的實現(xiàn)
本文主要介紹了python在windows調(diào)用svn-pysvn的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02python3.7安裝matplotlib失敗問題的完美解決方法
由于學(xué)習(xí)需要安裝matplotlib庫,閱讀網(wǎng)上教程后一直出現(xiàn)各種各樣的錯誤,下面這篇文章主要給大家介紹了關(guān)于python3.7安裝matplotlib失敗問題的完美解決方法,需要的朋友可以參考下2022-07-07