python布林型別和邏輯運算

2022-02-20 09:29:00 字數 4337 閱讀 2742

python中true表示真,false表示假,它們是布林型別:

>>> type(true)

在python中,bool的true和false是數值1和0的字串表示格式,實際上bool型別是int型別的乙個子類

>>> bool.__bases__

(,)

因為true/false是數值1和0的另一種表示方式,它們可以直接參與數值運算。

>>> true + 2

3>>> false + 2 - 1

1

雖然true代表1,false代表0。但實際上,python中的任何乙個資料物件要麼是true,要麼是false,所以可以直接在布林測試的表示式中使用,而並非一定要去大小比較、通過函式測試等等。比如:

if "a":

while 1:

可以通過bool()函式來測試資料物件、表示式是true還是false。例如:

>>> bool(0)

false

>>> bool(1)

true

>>> bool('a')

true

>>> bool('')

false

那麼,哪些型別的資料是true,哪些型別的資料是false?

以下是各種內建資料型別的一些真、假示例:

true                 false

----------------------------------

number: 1、1.1 0、0.0

string: 'a' ''

none: none

list: ['a']、[1]

[0]、['']、[none]

set/dict: {}

tuple: ('a')、(1) ()、('')、(0)、(none)

看幾個示例:

>>> bool(1), bool(0)

(true, false)

>>> bool('a'), bool('')

(true, false)

>>> bool(none)

false

>>> bool(['a']), bool([1]), bool(), bool(['']), bool([()])

(true, true, false, true, true)

>>> bool(), bool({}), bool()

(true, false, true)

>>> bool(('a')), bool(()), bool(('')), bool((0)), bool(({}))

(true, false, false, false, false)

>>> bool(((),)),bool((none,))

(true, true)

實際上,乙個資料物件是真還是假,是根據這個型別的__bool__()的返回值(為false則為假)以及__len__()的返回值(為0則為假)來決定的。

none為假,它不是表示物件為空,也不是表示物件未定義。它自身就是乙個實實在在的資料物件,在記憶體中有自己的記憶體位址,而且整個python全域性只有乙個唯一的none物件。可以認為,none是一種特殊的資料物件,像數值1、字串'a'一樣,只不過記憶體中這個資料物件裡面儲存的資料是我們不得而知的,但它永遠表示為false

>>> a = none

>>> b = none

>>> a is b

true

在python中,沒有顯式定義return語句的函式、方法並不意味著沒有返回值,它們的預設返回值是none。比如print()函式:

>>> a=print("aa")

aa>>> print(a)

none

none有時候有些小技巧。比如,訪問或設定超出列表長度的元素時會報錯:

>>> s = 

>>> s[1]

traceback (most recent call last):

file "", line 1, in indexerror: list index out of range

>>> s[1] = 2

traceback (most recent call last):

file "", line 1, in indexerror: list assignment index out of range

但是可以預先將某些數量的none物件填充到列表中去,這樣列表就具備了元素,儘管它們都是none物件。

例如,向列表中填充10個none元素:

>>> s = [none] * 10

>>> s

[none, none, none, none, none, none, none, none, none, none]

>>> s[1]

>>> s[1] = 2

>>> s

[none, 2, none, none, none, none, none, none, none, none]

當然,將none換成其它資料也一樣可以,比如0,但用none來填充,一看就知道是為了填充而填充的佔位符,不是實際要操作的元素。

python中只支援字元形式的and、or、not邏輯運算,不支援符號型別的&&、||、!

需要注意,and和or會短路運算(即只要能確定真假關係,就立即停止運算),並返回運算的結果(不是返回true/false,而是返回表示式的運算結果)。而not運算是返回true/false的。

例如,and的邏輯運算:

>>> 2 and 3, 3 and 2

(3, 2)

>>> and {}

>>> 3 and

上面第一行and測試,因為and左邊的都是true,所以必須得評估and右邊的值,那麼不管and右邊是true還是false,都會返回and右邊的值,比如第一行and測試,第三行and測試。第二行and測試中,因為and左邊為false,所以直接能確定為false,所以直接短路返回

再看or邏輯運算:

>>> 2 or 3,3 or 2

(2, 3)

>>> or 3

3>>> or {}

{}

上面第一行or測試,因為or左邊已經能直接確定為true,所以直接短路返回or左邊的值。第二行和第三行or測試,因為or左邊都為false,所以必須測試右邊的,所以不管or右邊是true還是false,都返回or右邊的值。

再次說明,and、or返回的不是true/false的布林值,而是邏輯表示式的運算結果。但因為python中只要是資料,要麼是true,要麼是false,所以and/or/not都可以用於真假測試,只不過and/or還可以在布林測試的基礎上進行賦值操作。

例如,如果變數a為false,就賦值為某個值,否則採用a原有的值。

a = a or "hhhh"
更通用的,變數a取x、y、z等表示式中的乙個。

a = x or y

a = x or y or z

不僅如此,and/or還能實現if中選擇值的功能。例如,下面是等價的:

a = (( x and y) or z)

if x:

a = y

else:

a = z

當然,這種用and/or實現邏輯的可讀性太差,能用if的當然用if。

經常會遇到要測試資料是否為空。這裡的空可能是none、""、、{}、()中的一種,建議不要使用len() == 0去測試:

if len(x) == 0:

if not len(x) == 0:

而是直接將資料作為真、假值進行判斷:

if x:

if not x:

布林邏輯運算子

是的,我說的就是這幾個 普通與 短路與 普通或 短路或 為什麼叫 短路 呢?普通與 短路與 普通或 短路或 這個短路是形象的說法,採用 了初中物理的乙個名詞,這樣叫,只是為了更好的區分它們。短路的意思 可以理解為 當線路出現問題,有些器件不會執行。同理 1.當在 a b 條件下,當a為false時,...

布林運算,位運算,邏輯運算

c語言支援按位布林運算,也就是同樣有與,或,取反,異或。乙個數,異或它本身 0。通過異或的這一特點,我們可以不需要第三個值就能將兩個值調換。這種交換方式並沒有效能上的優勢,它僅僅是乙個智力遊戲。深入理解計算機系統 假設一開始有兩個數x a,y b y x y y a b x x y x a a b ...

布林邏輯運算子之「 」和「 」

和 是布林邏輯運算子中的邏輯或及邏輯與 1 只要 前面為false,無論 後面是true還是false,結果都返回 後面的值。2 只要 前面為true,無論 後面是true還是false,結果都返回 前面的值。3 只要 前面是false,無論 後面是true還是false,結果都將返 前面的值 4 ...