標籤:fun null mkt yaf pop3 def lan wow psi
python中任何對象都能直接進行真假值的測試,用於if或者while語句的條件判斷,也可以做為布爾邏輯運算子的運算元
python中任何對象都能直接進行真假值的測試,而不需要額外的類型轉換
這一點是和其它語言不一樣的。比如C#,一個非bool的對象,如果要進行邏輯判斷則必須先強制進行類型轉換、或者調用對象的自身判斷方法進行判斷。
var message = " ";if (message.IsNullOrEmpty()){ ...}
而python中可以直接對對象進行邏輯判斷無需類型轉換
message = " "if message : pass
對象的真假值測試的結果,要麼是True,要麼是False
布爾類型的值只有True和False,所以對象是不管什麼類型,其真假值的測試結果必然是True和False中的一個。在python中真假值的測試結果可以通過調用內建函數bool來確認。
>>> bool(‘ ‘)True>>> bool(‘‘)False
以下的內建對象會被視為False值
- None
>>> bool(None)False
- False
>>> bool(False)False
- 任何數實值型別的零,例如,0、0.0、0j
>>> bool(0),bool(0.0),bool(0j)(False, False, False)
- 任何空序列,例如,”、()、[]
>>> bool(‘‘),bool(()),bool([])(False, False, False)
- 任何空映射,例如,{}
>>> bool({})False
內建對象除了以上值之外的都是真值
常量NotImplemented、Ellipsis、True是真值
>>> bool(NotImplemented)True>>> bool(Ellipsis)True>>> bool(True)True
對於使用者自訂的類,其真假值取決於該類有沒有定義
__bool__()或
__len__(),以及這兩個方法返回的值
如果自訂類未沒有定義__bool__()和__len__()方法,則該類的執行個體對象的真假值測試總是True。
>>> class A: pass>>> a = A()>>> bool(a)True
如果自訂類只定義了__bool__()方法,則該類的執行個體對象的真假值測試結果為__bool__()方法返回的結果
>>> class B(): def __init__(self,name): self.name = name def __bool__(self): return bool(self.name)>>> b1 = B(‘‘)>>> bool(b1)False>>> b2 = B(‘jay‘)>>> bool(b2)True
如果自訂類只定義了__len__()方法,則該類的執行個體對象的真假值測試結果為__len__()方法返回的結果是否為整數0
>>> class C(): def __init__(self,name): self.name = name def __len__(self): return len(self.name)>>> c1 = C(‘‘)>>> bool(c1)False>>> c2 = C(‘jay‘)>>> bool(c2)True
如果自訂類同時定義了__bool__()和__len__()方法,則該類的執行個體對象的真假值測試結果為__bool__()方法返回的結果,即__bool__()方法優先順序高於__len__()方法。
>>> class D(): def __len__(self): return 1 def __bool__(self): return False>>> d = D()>>> bool(d)False>>> class E(): def __len__(self): return 0 def __bool__(self): return True>>> e = E()>>> bool(e)True
?
歡迎關注公眾號交流:
Python內建類型(1)——真值測試