Python bool邏輯踩坑

池魚小北發表於2019-03-21

Python中的True和False

在Python中,None、任何數值型別中的0、空字串“”、空元組()、空列表[]、空字典{}都被當作False,還有自定義型別,如果實現了  __ nonzero __ () 或 __ len __ () 方法且方法返回 0 或False,則其例項也被當作False,其他物件均為True。

當只有一個運算子時:

    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
複製程式碼

短路邏輯

  • 表示式從左至右運算,若or的左側邏輯值為True,則短路or後所有的表示式(不管是and 還是or),直接輸出or左側表示式 。
  • 表示式從左至右運算,若and的左側邏輯值為False,則短路其後所有and表示式,直到有or 出現,輸出and左側表示式到or的左側,參與接下來的邏輯運算。
  • or的左側為False,或者and的左側為True則不能使用短路邏輯。

舉個例子:

def a():
    print("a is true")
    return True

def b():
    print("b is true")
    return True

def c():
    print("c is false")
    return False

def d():
    print("d is false")
    return False

print(a() and b() and c() and d())
print("*"*20)

print(a() or b() or c() or d())
print("*"*20)

print(a() and d() and c() and b())
複製程式碼

執行結果:

a is true
b is true
c is false
False
********************
a is true
True
********************
a is true
d is false
False
複製程式碼

相關文章