計算機的本質就是計算,在其內部是0
和1
的位元位的變化,對外表現就是資料的變化。那麼,計算機都能處理什麼資料呢?本質上,資料都是以位元組(Byte)儲存的,表現上看,它們就是整數、浮點數和字串等。Python的基本資料型別也不外乎於此。
整數和浮點數就跟數學中的一樣,而字串就是各種字元的組合。另外Python還有一種資料型別叫做布林型別(Boolean)。
布林型別
布林型別是計算機中最基本的型別,它是計算機二進位制世界的體現,一切都是0
和1
。Python中的布林型別只有兩種值:True
和False
。(注意:首字母都是大寫,與C++、JavaScript中的小寫有所不同)
布林型別回答的是是非
問題,那麼什麼情況下是True
,什麼情況下是False
呢? Python裡面實現了一個型別物件
叫做bool
,bool是一個int
的子類,內建的True
和False
就是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)表示“是非”,是比較運算的結果,是條件判斷的結果,從而決定程式的流程和分支走向。
我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***