前幾天有看到一篇 Flask 開發(fā)團隊內(nèi)部 Python 編碼風格指南 ,里面有一段關(guān)于比較的規(guī)范覺得很有意思:
任意類型之間的比較,使用 == 和 !=
與單例(singletons)進行比較時,使用 is 和 is not
永遠不要與 True 或 False 進行比較(例如,不要這樣寫:foo == False,而應(yīng)該這樣寫:not foo)
自己在寫代碼的時候很少去關(guān)注變量的比較要如何實現(xiàn),基本都是直接使用 == 。今天就借此機會聊聊 Python 中的比較運算符。
== 與 !=
== 和 != 是等值校驗。
這兩個運算符是我們最熟悉不過的比較運算符了。== 會根據(jù)魔術(shù)方法 eq 檢測左右兩側(cè)對象的值是否相等。
例如 x == y ,其實背后的操作是 x.__eq__(y)。
Python編碼風格篇:比較運算符
is
is 是身份校驗。它將檢測左右兩側(cè)是否為同一個對象。
同一個對象必須滿足:
* 值相同
* 內(nèi)存地址相同
因此就不難理解為什么 is 和 is not 用于單例(singletons)比較了。
單例(singletons)是什么?
單例是一種設(shè)計模式,應(yīng)用該模式的類只會生成一個實例。
單例模式保證了在程序的不同位置都可以且僅可以取到同一個對象實例:
如果實例不存在:會創(chuàng)建一個實例
如果實例已存在:會返回這個實例
not
not 是 Python 中的邏輯判斷詞,常用于布爾型 True 和 False。
not True -> False
not False -> True
邏輯判斷
a = False
not a 為 True
if not a:
pass
判斷元素是否存在
a = 100
b = [1, 2, 3]
元素 a 是否不在列表 b 中
if a not in b:
pass
總結(jié)
僅對值進行簡單比較時可以使用 ==/!= 操作符:
a = 1
b = 2
if a == b:
pass
else:
pass
is 用于比較單例,例如比較 None:
if a is None:
pass
if a is not None:
pass
如果涉及布爾值 True/False 的判斷,使用 not,不要直接與 True 或 False 比較:
a = False
b = True
正確的寫法
if not a:
pass
if b:
pass
錯誤的寫法
if a == False:
pass
not 還可以用于判斷元素是否在列表/字典中存在。
熱門工具 換一換