Effective Python(2)- 遵循 PEP 8 風格指南

什麼是 PEP8 風格

  • Python Enhancement Proposal #8 叫作 PEP 8
  • 它是一份針對 Python 代碼格式而編訂的風格指南
  • 儘管只要語法正確,代碼隨便怎麼寫都行,但採用一致的風格可以使代碼更易讀、更易懂

官方:https://www.python.org/dev/peps/pep-0008/

中文翻譯博客:https://www.cnblogs.com/ajianbeyourself/p/4377933.html

 

與空白有關的建議

在Python中,空白(whitespace)在語法上相當重要

  1. 空格(space)表示縮進,而不要用製表符(tab)
  2. 和語法相關的每一層縮進都用 4 個空格表示
  3. 每行不超過 79 個字符
  4. 對於佔據多行的長表達式來說,除了首行之外的其餘各行都應該在通常的縮進級別之上再加 4 個空格
  5. 在同一份文件中,函數與類之間用 2 個空行隔開
  6. 在同一個類中,方法與方法之間用 1 個空行隔開
  7. 使用字典時,鍵與冒號之間不加空格,寫在同一行的冒號和值之間應該加 1 個空格
  8. 給變量賦值時,賦值符號的左邊和右邊各加 1 個空格,並且只加一個空格就好
  9. 給變量的類型做註解(annotation)時,不要把變量名和冒號隔開,但在類型信息前應該有一個空格

這個其實不用硬背,用 pycharm 的同學應該都知道,代碼格式化會自動完成這些事

 

與命名有關的建議

函數、變量及屬性

  • 用小寫字母來拼寫,各單詞之間用下劃線相連
  • lowercase_underscore

 

受保護的實例屬性

  • 用一個下劃線開頭
  • _leading_underscore

 

私有的實例屬性

  • 用兩個下劃線開頭 
  • __double_leading_underscore

 

類(包括異常)命名

  • 每個單詞的首字母均大寫
  • CapitalizedWord

 

模塊級別的常量

  • 所有字母都大寫,各單詞之間用下劃線相連
  • ALL_CAPS

 

類中的實例方法

應該把第一個參數命名爲 self,用來表示該對象本身

 

類方法

第一個參數,應該命名爲 cls,用來表示這個類本身

 

與表達式和語句有關的建議

採用行內否定

  • 把否定詞直接寫在要否定的內容前面,而不要放在整個表達式的前面
  • 例如應該寫   if a is not b ,而不是  if not a is b 

 

不要通過長度判斷容器或序列是不是空的

  • 例如不要通過 if len(somelist) == 0  判斷 somelist 是否爲 [] 或 '' 等空值
  • 而是應該採用 if not somelist  這樣的寫法來判斷,因爲 Python 會把空值自動評估爲 False

 

不要通過長度判斷容器或序列裏面有沒有內容

  • 比如要判斷 somelist 是否爲 [1] 或 'hi' 這樣非空的值),也不應該通過長度來判斷
  • 而是應該採用 if somelist ,因爲 Python  會把非空的值自動判定爲  True

 

不要把 if 語句、for 循環、while 循環及 except 複合語句擠在一行

  • 應該把這些語句分成多行來寫,這樣更加清晰
  • 如果表達式一行寫不下,可以用括號將其括起來,而且要適當地添加換行與縮進以便於閱讀

 

多行的表達式

應該用括號括起來,而不要用\

# 錯誤示範
folder["interfaces"] = db.query(Interface). \
    filter(folder_id == Interface.folder_id,
           Interface.is_delete == 0). \
    all()

# 正確示範
folder["interfaces"] = (
    db.query(Interface)
    .filter(folder_id == Interface.folder_id, Interface.is_delete == 0)
    .all()
)

 

與 import 有關的建議

  • import 語句(含  from x import y )總是應該放在文件開頭
  • 引入模塊時,總是應該使用絕對名稱,而不應該根據當前模塊路徑來使用相對名稱
  • 例如,要引入 bar 包中的 foo 模塊,應該完整地寫出 from bar import foo  ,即便當前路徑爲 bar  包裏,也不應該簡寫爲  import foo 
  • 如果一定要用相對名稱來編寫 import 語句,那就應該明確地寫成 from . import foo 

 

文件中的 import 語句應該按順序劃分成三個部分

  1. 首先引入標準庫裏的模塊
  2. 然後引入第三方模塊
  3. 最後引入自己的模塊

屬於同一個部分的 import 語句按字母順序排列

 

提醒

不想自己手動來保證 import 的順序是符合規範的,可以藉助 isort 這個工具來自動完成哦!

https://www.cnblogs.com/poloyy/p/15549542.html

 

Pylint

  • 是 Python 源碼靜態分析工具
  • 它可以自動檢查受測代碼是否符合PEP 8風格指南,而且還能找出Python程序裏的許多種常見錯誤
  • 感興趣可以自行百度學習,這裏不展開講解了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章