Effective Python(2)- 遵循 PEP 8 風格指南
阿新 • • 發佈:2021-11-13
什麼是 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)在語法上相當重要
- 用空格(space)表示縮排,而不要用製表符(tab)
- 和語法相關的每一層縮排都用 4
- 每行不超過 79 個字元
- 對於佔據多行的長表示式來說,除了首行之外的其餘各行都應該在通常的縮排級別之上再加 4 個空格
- 在同一份檔案中,函式與類之間用 2 個空行隔開
- 在同一個類中,方法與方法之間用 1 個空行隔開
- 使用字典時,鍵與冒號之間不加空格,寫在同一行的冒號和值之間應該加 1 個空格
- 給變數賦值時,賦值符號的左邊和右邊各加 1 個空格,並且只加一個空格就好
- 給變數的型別做註解(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 語句應該按順序劃分成三個部分
- 首先引入標準庫裡的模組
- 然後引入第三方模組
- 最後引入自己的模組
屬於同一個部分的 import 語句按字母順序排列
提醒
不想自己手動來保證 import 的順序是符合規範的,可以藉助 isort 這個工具來自動完成哦!
https://www.cnblogs.com/poloyy/p/15549542.html
Pylint
- 是 Python 原始碼靜態分析工具
- 它可以自動檢查受測程式碼是否符合PEP 8風格指南,而且還能找出Python程式裡的許多種常見錯誤
- 感興趣可以自行百度學習,這裡不展開講解了