所有的python對象都支持比較操作——測試相等性瞬痘、相對大小等酥馍。
python對象的比較是比較對象上所有的部分辩昆,即使嵌套,python 也能夠遍歷數(shù)據(jù)結(jié)構(gòu)旨袒,并且從左到右遞歸地比較汁针,要多深有多深。首次發(fā)現(xiàn)差值則決定比較的結(jié)果砚尽。
1. == 和 is
== 是表示數(shù)值的比較
is 是 比較的對象的一致性施无,即內(nèi)存地址指向同一個位置
: = [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
但是在字符串的比較中會出現(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,原因是因為python內(nèi)部暫時存儲并重復使用短字符串為最佳化尉辑,即內(nèi)存中只有一個“test”給astr和bstr使用帆精,并且字符串不可修改,所以即使有無數(shù)個變量引用他都不會修改字符串的內(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會小于blist
注:
- 數(shù)字比較是通過大小比較
- 字符串比較是安裝字典順序,一個字符一個字符的比較(如‘a(chǎn)bc’<'acb')
- 列表和元組從左到右對每部分進行比較
- 字典是通過排序之后的(健隘蝎,值)列表進行比較购啄,但在python3.0之后不支持
- 數(shù)字混合類型比較,在python3.0以后是錯誤的
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中每個對象不是真就是假
- 數(shù)字如果非零嘱么,則為真
-
其他對象如果非空則為真
如下圖所示:
對象真值示例
通呈ê可以看到if X:來來判斷對象是否為空
假設X為字符串等價于 if X !=""
5. None對象
None對象通常認為是假,但None是一種特殊的數(shù)據(jù)類型的唯一值,一般都一個空的占位作用几迄,與C語言的NULL指針類似蔚龙。
None不是意味著“未定義”,None是某些內(nèi)容映胁,而不是沒有內(nèi)容木羹,它是一個真正的對象,并且有一塊內(nèi)存
python中每個方法都有個一個默認的返回類型None
image.png