溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何理解Python中 and 和 or 運(yùn)算短路邏輯

發(fā)布時間:2021-10-26 10:58:55 來源:億速云 閱讀:193 作者:柒染 欄目:編程語言

本篇文章為大家展示了如何理解Python中 and 和 or 運(yùn)算短路邏輯,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

短路邏輯規(guī)則如下:

表達(dá)式從左至右運(yùn)算,若 or 的左側(cè)邏輯值為 True ,則短路 or 后所有的表達(dá)式(不管是 and 還是 or),直接輸出 or 左側(cè)表達(dá)式 。若 or 的左側(cè)邏輯值為 False ,則輸出or右側(cè)的表達(dá)式,不論其后表達(dá)式是真是假,整個表達(dá)式結(jié)果即為其后表達(dá)式的結(jié)果。

表達(dá)式從左至右運(yùn)算,若 and 的左側(cè)邏輯值為 False ,則短路其后所有 and 表達(dá)式,直到有 or 出現(xiàn),輸出 and 左側(cè)表達(dá)式到 or 的左側(cè),參與接下來的邏輯運(yùn)算。若 and 的左側(cè)邏輯值為 True,則輸出其后的表達(dá)式,不論其后表達(dá)式是真是假,整個表達(dá)式結(jié)果即為其后表達(dá)式的結(jié)果

若 or 的左側(cè)為 False ,或者 and 的左側(cè)為 True 則不能使用短路邏輯。

注意:

1、在Python中and的優(yōu)先級是大于or的,而且and和or都是會返回值的并且不轉(zhuǎn)換為True和False。當(dāng)not和and及or在一起運(yùn)算時,優(yōu)先級為是not>and>or

2、在Python中,None、任何數(shù)值類型中的0、空字符串“”、空元組()、空列表[]、空字典{}都被當(dāng)作False,還有自定義類型,如果實現(xiàn)了  __ nonzero __ () 或 __ len __ () 方法且方法返回 0 或False,則其實例也被當(dāng)作False,其他對象均為True。

下面是最簡單的邏輯運(yùn)算:

        
True  
and True    
==> True                                     
True  
or True    
==> True
        True  and False   ==> False                                   True  or False   ==> True
        False and True    ==> False                                   False or True    ==> True
        False and False   ==> False                                   False or False   ==> False

接下來我們再舉一個具體的例子:

先來定義一組函數(shù):

1>  
def a():

    2>     print ('A')

    3>     return 1

    4>  def b():

    5>     print ('B')

    6>     return 1

    7>  def c():

    8>     print ('C')

    9>     return []

    10> def d():

    11>    print ('D')

    12>    return []

    13> def e():

    14>    print ('E')

    15>    return 1   

例1:

17> 
if a() 
and b() 
and c() 
and d() 
and e():

    18>    print ('ok')

 

    #顯示結(jié)果如下

    A   

a() 為假 ,其后均為 and 語句,全部短路,最終只返回 a() 的表達(dá)式。記住,所有被短路的表達(dá)式均不會被輸出。所以,此處僅僅打印 A

例2:

17> 
if a() 
and b() 
and c() 
and d() 
and e():

    18>    print ('ok')

 

    #顯示結(jié)果如下

    A

    B

    C   

python 從左至右先執(zhí)行 a() ,a() 返回的邏輯值為 True,后面是 and 語句,所以不能短路其后,繼續(xù)與 b() 進(jìn)行邏輯運(yùn)算,a() and b() 輸出 b() 的邏輯值 True,接著與 c() 進(jìn)行邏輯運(yùn)算,b() and c() 輸出 c() 的邏輯值 False,而其后均為 and 語句, 則全部短路,最終只打印了 A B C 。

例3:

17> 
if a() 
or b() 
or c() 
or d() 
or e():

    18>    print ('ok')

 

    #顯示結(jié)果如下

    A

    Ok 

    #顯示結(jié)果如下

    A

    ok   

a() 的邏輯值為 True ,其后均為 or 語句,全部短路,最終只打印了 A,而 if 語句為 True ,所以還要打印一個 ok。

例4:

    
17> 
if a() 
or b() 
or c() 
or d() 
or e():

    18>    print ('ok')

 

    #顯示結(jié)果如下

    A

    B

    C

    Ok

python 從左至右先執(zhí)行 a() ,a() 返回的邏輯值為 False,后面是 or 語句,所以不能短路其后,繼續(xù)與 b() 進(jìn)行邏輯運(yùn)算,a() or b() 輸出 b() 的邏輯值 False,接著與 c() 進(jìn)行邏輯運(yùn)算,b() or c() 輸出 c() 的邏輯值 True,而其后為 or 語句, 則全部短路,最終只打印了 A B C ok。

例5:

 26> 
if a() 
and b() 
and  
c() 
and d() 
or e() 
and f() 
or g() 
and h():

    27>    print ('ok')

 

    #輸出結(jié)果如下:

    A

    E

    F

    Ok  

別以為語句很長就很難,我們好好分析一下,從左至右,首先a() 的邏輯值為 False,其后到 or 語句為止有三個 and 語句: a() and b() and c() and d(),均被短路。只輸出 a(), 得到 a() or e() 為True,輸出 e() ,得 e() and F() 為 True ,輸出 f(), 其后接 or 語句,則短路其后所有。最終只打印了A E F ok 。

上述內(nèi)容就是如何理解Python中 and 和 or 運(yùn)算短路邏輯,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI