PEP 8風格指南
PEP是Python Enhancement Proposal的縮寫,通常翻譯為“Python增強提案”。每個PEP都是⼀份為
Python社群提供的指導Python往更好的⽅向發展的技術⽂檔,其中的第8号增強提案(PEP 8)是針
對Python語⾔編訂的代碼⻛格指南。盡管我們可以在保證文法沒有問題的前提下随意書寫Python代
碼,但是在實際開發中,采⽤⼀緻的⻛格書寫出可讀性強的代碼是每個專業的程式員應該做到的事
情,也是每個公司的程式設計規範中會提出的要求,這些在多⼈協作開發⼀個項⽬(團隊開發)的時候顯
得尤為重要。我們可以從Python官⽅⽹站的PEP 8連結中找到該⽂檔,下⾯我們對該⽂檔的關鍵部分
做⼀個簡單的總結。
空格的使用
-
使⽤空格來表示縮進⽽不要⽤制表符(Tab)。這⼀點對習慣了其他程式設計語⾔的⼈來說簡直覺得
不可理喻,因為絕⼤多數的程式員都會⽤Tab來表示縮進,但是要知道Python并沒有像C/C++或
Java那樣的⽤花括号來構造⼀個代碼塊的文法,在Python中分⽀和循環結構都使⽤縮進來表示哪
些代碼屬于同⼀個級别,鑒于此Python代碼對縮進以及縮進寬度的依賴⽐其他很多語⾔都強得
多。在不同的編輯器中,Tab的寬度可能是2、4或8個字元,甚⾄是其他更離譜的值,⽤Tab來表
示縮進對Python代碼來說可能是⼀場災難。
- 和文法相關的每⼀層縮進都⽤4個空格來表示。
-
每⾏的字元數不要超過79個字元,如果表達式因太⻓⽽占據了多⾏,除了⾸⾏之外的其餘各⾏都
應該在正常的縮進寬度上再加上4個空格。
- 函數和類的定義,代碼前後都要⽤兩個空⾏進⾏分隔。
- 在同⼀個類中,各個⽅法之間應該⽤⼀個空⾏進⾏分隔。
- ⼆元運算符的左右兩側應該保留⼀個空格,⽽且隻要⼀個空格就好。
辨別符命名
PEP 8倡導⽤不同的命名⻛格來命名Python中不同的辨別符,以便在閱讀代碼時能夠通過辨別符的名
稱來确定該辨別符在Python中扮演了怎樣的⻆⾊(在這⼀點上,Python⾃⼰的内置子產品以及某些第
三⽅子產品都做得并不是很好)。
- 變量、函數和屬性應該使⽤⼩寫字⺟來拼寫,如果有多個單詞就使⽤下劃線進⾏連接配接。
- 類中受保護的執行個體屬性,應該以⼀個下劃線開頭。
- 類中私有的執行個體屬性,應該以兩個下劃線開頭。
- 類和異常的命名,應該每個單詞⾸字⺟⼤寫。
- 子產品級别的常量,應該采⽤全⼤寫字⺟,如果有多個單詞就⽤下劃線進⾏連接配接。
- 類的執行個體⽅法,應該把第⼀個參數命名為 self 以表示對象⾃身。
- 類的類⽅法,應該把第⼀個參數命名為 cls 以表示該類⾃身。
表達式和語句
在Python之禅(可以使⽤ import this 檢視)中有這麼⼀句名⾔:“There should be one-- and
preferably only one --obvious way to do it.”,翻譯成中⽂是“做⼀件事應該有⽽且最好隻有⼀種确切
的做法”,這句話傳達的思想在PEP 8中也是⽆處不在的。
-
采⽤内聯形式的否定詞,⽽不要把否定詞放在整個表達式的前⾯。例如 if a is not b 就⽐ if
not a is b 更容易讓⼈了解。
-
不要⽤檢查⻓度的⽅式來判斷字元串、清單等是否為 None 或者沒有元素,應該⽤ if not x 這
樣的寫法來檢查它。
-
就算 if 分⽀、 for 循環、 except 異常捕獲等中隻有⼀⾏代碼,也不要将代碼和
if 、 for 、 except 等寫在⼀起,分開寫才會讓代碼更清晰。
- import 語句總是放在⽂件開頭的地⽅。
- 引⼊子產品的時候, from math import sqrt ⽐ import math 更好。
-
如果有多個 import 語句,應該将其分為三部分,從上到下分别是Python标準子產品、第三⽅子產品
和⾃定義子產品,每個部分内部應該按照子產品名稱的字⺟表順序來排列。