1. 程式人生 > 其它 >Effective Python(2)- 遵循 PEP 8 風格指南

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程式裡的許多種常見錯誤
  • 感興趣可以自行百度學習,這裡不展開講解了