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標準模塊、第三方模塊和自定義模塊,每個部分內部應該按照模塊名稱的字母表順序來排列。