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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM