2018-07-24 比較、相等和真值

所有的python對(duì)象都支持比較操作——測(cè)試相等性、相對(duì)大小等。
python對(duì)象的比較是比較對(duì)象上所有的部分,即使嵌套,python 也能夠遍歷數(shù)據(jù)結(jié)構(gòu),并且從左到右遞歸地比較,要多深有多深。首次發(fā)現(xiàn)差值則決定比較的結(jié)果。

1. == 和 is

== 是表示數(shù)值的比較
is 是 比較的對(duì)象的一致性,即內(nèi)存地址指向同一個(gè)位置

: = [1, [2, 3], 4]
blist = [1, [2, 3], 4]
print alist == blist
print alist is blist

結(jié)果如下所示:

(python_test) ?  20180724 python test1.py 
True
False
(python_test) ?  20180724 

但是在字符串的比較中會(huì)出現(xiàn)下面情況

astr = "test"
bstr = "test"
print astr == bstr
print astr is bstr

結(jié)果如下所示:

(python_test) ?  20180724 python test2.py 
True
True
(python_test) ?  20180724 

倆種比較的結(jié)果都返回的是True,原因是因?yàn)閜ython內(nèi)部暫時(shí)存儲(chǔ)并重復(fù)使用短字符串為最佳化,即內(nèi)存中只有一個(gè)“test”給astr和bstr使用,并且字符串不可修改,所以即使有無數(shù)個(gè)變量引用他都不會(huì)修改字符串的內(nèi)容。

2. 大小比較

事例如下所示

##test3.py
alist = [1, [2, 3], 4]
blist = [1, [2, 4], 5]
print alist < blist, alist == blist, alist > blist

結(jié)果如下所示;

(python_test) ?  20180724 python test3.py
True False False
(python_test) ?  20180724 

由于嵌套的3<4,則alist會(huì)小于blist
注:

  • 數(shù)字比較是通過大小比較
  • 字符串比較是安裝字典順序,一個(gè)字符一個(gè)字符的比較(如‘a(chǎn)bc’<'acb')
  • 列表和元組從左到右對(duì)每部分進(jìn)行比較
  • 字典是通過排序之后的(健,值)列表進(jìn)行比較,但在python3.0之后不支持
  • 數(shù)字混合類型比較,在python3.0以后是錯(cuò)誤的

3. python3.x的字典比較方法

  1. 根據(jù)鍵值循環(huán)比較
  2. 通過items字典方法和內(nèi)置的sorted方法
    如下所示
adict = {'a': 1, 'b': 3}
bdict = {'b': 4, 'a': 1}
print sorted(adict.items()) < sorted(bdict.items())
print sorted(adict.items()) == sorted(bdict.items())
print sorted(adict.items()) > sorted(bdict.items())

結(jié)果如下所示

(python_test) ?  20180724 python test4.py
True
False
False
(python_test) ?  20180724 

4. 真假的含義

python中每個(gè)對(duì)象不是真就是假

  • 數(shù)字如果非零,則為真
  • 其他對(duì)象如果非空則為真
    如下圖所示:


    對(duì)象真值示例

    通??梢钥吹絠f X:來來判斷對(duì)象是否為空
    假設(shè)X為字符串等價(jià)于 if X !=""

5. None對(duì)象

None對(duì)象通常認(rèn)為是假,但None是一種特殊的數(shù)據(jù)類型的唯一值,一般都一個(gè)空的占位作用,與C語言的NULL指針類似。
None不是意味著“未定義”,None是某些內(nèi)容,而不是沒有內(nèi)容,它是一個(gè)真正的對(duì)象,并且有一塊內(nèi)存
python中每個(gè)方法都有個(gè)一個(gè)默認(rèn)的返回類型None


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容