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 ...