所有的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的字典比較方法
- 根據(jù)鍵值循環(huán)比較
- 通過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

