前段時間看到一篇 Flask 開發團隊內部 Python 編碼風格指南 ,裏面有一段關於比較的規範:html
==
和 !=
is
和 is not
True
或 False
進行比較(例如,不要這樣寫:foo == False
,而應該這樣寫:not foo
)本身在寫代碼的時候不多去關注變量的比較要如何實現,基本都是直接使用 ==
。今天就藉此機會聊聊 Python 中的比較運算符。python
==
和 !=
是等值校驗。編程
這兩個運算符是咱們最熟悉不過的比較運算符了。==
會根據魔術方法 __eq__
檢測左右兩側對象的值是否相等。設計模式
例如 x == y
,其實背後的操做是 x.__eq__(y)
。bash
is
是身份校驗。它將檢測左右兩側是否爲同一個對象。ide
同一個對象必須知足:ui
所以就不難理解爲何 is
和 is not
用於單例(singletons)比較了。編碼
單例是一種設計模式,應用該模式的類只會生成一個實例。spa
單例模式保證了在程序的不一樣位置都能夠且僅能夠取到同一個對象實例:.net
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
複製代碼
僅對值進行簡單比較時能夠使用 ==
/!=
操做符:
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
還能夠用於判斷元素是否在列表/字典中存在。
若是你以爲文章寫得不錯,請幫我兩個小忙:
你的鼓勵是我寫做最大的動力,謝謝你們!