Python基本資料型別:布林型別(Boolean)

veelion發表於2019-01-05

計算機的本質就是計算,在其內部是01的位元位的變化,對外表現就是資料的變化。那麼,計算機都能處理什麼資料呢?本質上,資料都是以位元組(Byte)儲存的,表現上看,它們就是整數、浮點數和字串等。Python的基本資料型別也不外乎於此。

整數和浮點數就跟數學中的一樣,而字串就是各種字元的組合。另外Python還有一種資料型別叫做布林型別(Boolean)。

布林型別

布林型別

布林型別是計算機中最基本的型別,它是計算機二進位制世界的體現,一切都是01。Python中的布林型別只有兩種值:TrueFalse。(注意:首字母都是大寫,與C++、JavaScript中的小寫有所不同)

布林型別回答的是是非問題,那麼什麼情況下是True,什麼情況下是False呢? Python裡面實現了一個型別物件叫做bool,bool是一個int的子類,內建的TrueFalse就是bool僅有的兩個例項物件。

使用bool我們就可以對物件進行布林真假判斷:

In [3]: bool(None)
Out[3]: False

In [4]: bool(0)
Out[4]: False

In [5]: bool([])
Out[5]: False

In [6]: bool(())
Out[6]: False

In [7]: bool('')
Out[7]: False

In [8]: bool({})
Out[8]: False

以上是判斷為假的情況,總結一下為假的情況有:

  • None, False
  • 數值中的0, 0.0, 0j(虛數), Decimal(0), Fraction(0, 1)
  • 空字串('')、空元組(())、空列表([])
  • 空字典({})、空集合(set())
  • 物件預設為True,除非它有bool()方法且返回False或len()方法且返回0.

布林運算: and, or, not

下面的表列舉了布林運算的結果,優先順序為升序:

運算 表示式 結果 說明
或運算 x or y 如果x為False則取決於y;如果x為True則不考慮y (1)
與運算 x and y 如果x為False則不考慮y;如果x為True則取決於y (2)
非運算 not x 如果x為False則為True,否則為False (2)

說明:
(1)or 是一種“短路運算子”,只有當第一個為False時才去驗證第二個。即:兩個變數只要有一個為True則為True。
(2)and也是種“短路運算子”,只有當第一個為True時才去驗證第二個。即:兩個變數都為True時結果才為True。
(3)not的優先順序比非布林運算子底,所以not a == b解釋為not (a == b),並且a == not b是語法錯誤。

In [24]: 1 == not 2
  File "<ipython-input-24-886f7aef0701>", line 1
    1 == not 2
           ^
SyntaxError: invalid syntax


In [25]: not 1 == 22
Out[25]: True

上面講到,or, and, not的優先順序是依次遞增的,優先順序跟小學數學中先乘除後加減但括號裡面的更優先是一樣的。
那麼小猿們猜猜下面的程式碼會輸出什麼:

print('' or 'b' and 'c')

優先順序and大於or,所以先計算and
(1)先計算'b' and 'c'時,'b'是True,則結果取決於'c',因此返回'c'
(2)再計算'' or 'c'''是False,則結果取決於'C',因此返回'c'
(3)最後列印出:c
你算對了嗎?

比較運算

前面提到,布林值反應的是“是非”,有比較才有是非。Python中有8中比較運算。它們有相同的優先順序,比布林運算的優先順序高。比較運算子可以任意的連寫,比如:x < y <=z相當於x < y and y <= z

下面我們用表格來說明這8種不同的比較運算:

運算 含義
< 小於
<= 小於等於
> 大於
>= 大於等於
== 等於
!= 不等於
is 是物件
is not 不是物件

總結

布林型別(True, False)表示“是非”,是比較運算的結果,是條件判斷的結果,從而決定程式的流程和分支走向。

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章