Python內建類型(1)——真值測試

來源:互聯網
上載者:User

標籤: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)——真值測試

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.