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