Python 編碼風格指南:比較運算符

前段時間看到一篇 Flask 開發團隊內部 Python 編碼風格指南 ,裏面有一段關於比較的規範:html

  • 任意類型之間的比較,使用 ==!=
  • 與單例(singletons)進行比較時,使用 isis not
  • 永遠不要與 TrueFalse 進行比較(例如,不要這樣寫:foo == False,而應該這樣寫:not foo

本身在寫代碼的時候不多去關注變量的比較要如何實現,基本都是直接使用 == 。今天就藉此機會聊聊 Python 中的比較運算符。python

== 與 !=

==!=等值校驗編程

這兩個運算符是咱們最熟悉不過的比較運算符了。== 會根據魔術方法 __eq__ 檢測左右兩側對象的是否相等。設計模式

例如 x == y ,其實背後的操做是 x.__eq__(y)bash

is

is身份校驗。它將檢測左右兩側是否爲同一個對象ide

同一個對象必須知足:ui

  1. 值相同
  2. 內存地址相同

所以就不難理解爲何 isis not 用於單例(singletons)比較了。編碼

單例(singletons)是什麼?

單例是一種設計模式,應用該模式的類只會生成一個實例。spa

單例模式保證了在程序的不一樣位置都能夠且僅能夠取到同一個對象實例.net

  • 若是實例不存在:會建立一個實例
  • 若是實例已存在:會返回這個實例

not

not 是 Python 中的邏輯判斷詞,經常使用於布爾型 TrueFalse

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,不要直接與 TrueFalse 比較:

a = False
b = True

# 正確的寫法
if not a:
    pass
if b:
    pass

# 錯誤的寫法
if a == False:
    pass
複製代碼

not 還能夠用於判斷元素是否在列表/字典中存在。

參考資料與擴展閱讀


若是你以爲文章寫得不錯,請幫我兩個小忙:

  1. 點贊並關注我,讓這篇文章被更多人看到
  2. 關注公衆號「編程拯救世界」,你將第一時間得到新文章的推送

你的鼓勵是我寫做最大的動力,謝謝你們!

相關文章
相關標籤/搜索