<a href="#%E7%9B%AE%E5%BD%95">目錄</a>
<a href="#%E4%BB%A3%E7%A0%81%E5%B8%83%E5%B1%80">代碼布局</a>
<a href="#%E7%BC%A9%E8%BF%9B">縮進</a>
<a href="#%E6%9C%80%E5%A4%A7%E8%A1%8C%E5%AE%BD">最大行寬</a>
<a href="#%E7%A9%BA%E8%A1%8C">空行</a>
<a href="#%E6%A8%A1%E5%9D%97%E5%AF%BC%E5%85%A5">子產品導入</a>
<a href="#%E5%AD%97%E7%AC%A6%E4%B8%B2">字元串</a>
<a href="#%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%92%8C%E8%AF%AD%E5%8F%A5%E4%B8%AD%E7%9A%84%E7%A9%BA%E6%A0%BC">表達式和語句中的空格</a>
<a href="#%E6%B3%A8%E9%87%8A">注釋</a>
<a href="#%E5%91%BD%E5%90%8D%E8%A7%84%E5%88%99">命名規則</a>
<a href="#%E7%BC%96%E7%A8%8B%E5%BB%BA%E8%AE%AE">程式設計建議</a>
每級縮進用4個空格。
括号中使用垂直隐式縮進或使用懸挂縮進。
EXAMPLE:
錯誤示範:
每行最大行寬不超過 79 個字元
一般續行可使用反斜杠
括号内續行不需要使用反斜杠
兩行空行用于分割頂層函數和類的定義
單個空行用于分割類定義中的方法
導入的每個子產品應該單獨成行
導入順序如下: (各子產品類型導入之間要有空行分割,各組裡面的子產品的順序按子產品首字母自上而下升序排列)
标準庫
相關的第三方庫
本地庫
錯誤示例:
單引号和雙引号作用是一樣的,但必須保證成對存在,不能夾雜使用.
(建議句子使用雙引号, 單詞使用單引号, 但不強制.)
括号裡邊避免空格
逗号,冒号,分号之前避免空格
函數調用的左括号之前不能有空格
指派等操作符前後不能因為對齊而添加多個空格
二進制運算符兩邊放置一個空格
涉及 = 的複合操作符 ( += , -=等)
比較操作符 ( == , < , > , != , <> , <= , >= , in , not in , is , is not )
邏輯操作符( and , or , not )
注釋塊
注釋塊通常應用在代碼前,并和代碼有同樣的縮進。每行以 ‘# ’ 開頭, 而且#後面有單個空格。
單行注釋(應避免無謂的注釋)
文檔字元串
包和子產品名:
包和子產品名應該簡短,全部用小寫字母, 多字母之間可以使用單下劃線連接配接。
類名:
遵循駝峰命名
全局變量名:
全局變量名應盡量隻在子產品内部使用, 對可能使用語句 <code>from moduleName import variableName</code> 而被導入的子產品,應采用 <code>__all__</code> 機制來防止全局變量被别的子產品導入, 或者在全局變量名開頭加一個前置下劃線.
函數名
函數名應該為全部小寫的凹駝峰規則。
常量名
常量全部使用大寫字母的凹駝峰規則來表示, 通常在子產品頂格定義
方法名和執行個體變量
非公開方法和執行個體變量開頭使用前置下劃線
有時候可能會為了避免與子類命名沖突,采用兩個前置下劃線
需要注意的是: 若 class Foo 的屬性名為 <code>__a</code>, 該屬性是不能以 <code>Foo.__a</code> 的方式通路的(執著的使用者還是可以通過<code>Foo._Foo__a</code> 來通路), 是以通常雙前置下劃線僅被用來避免與基類的屬性發生命名沖突。
None 的比較用 is 或 is not,而不要用 ==
用 is not 代替 not … is, 前者的可讀性更好
使用函數定義關鍵字 def 代替 lambda 指派給辨別符, 這樣更适合于回調和字元串表示
異常類應該繼承自Exception,而不是 BaseException
Python 2 中用<code>raise ValueError('message')</code> 代替 <code>raise ValueError, 'message'</code>
(考慮相容python3和續行的友善性)
捕獲異常時盡量指明具體異常, 盡量不用 <code>except Exception</code>, 應該捕獲 出了什麼問題,而不是 問題發生
try/except 子句中的代碼要盡可能的少, 以免屏蔽掉其他的錯誤
函數或者方法在沒有傳回值時要明确傳回 None
使用字元串方法而不是 string 子產品
python 2.0 以後字元串方法總是更快,而且與 Unicode 字元串使用了相同的 API
使用使用 <code>.startswith()</code> 和 <code>.endswith()</code> 代替字元串切片來檢查字首和字尾
<code>startswith()</code> 和 <code>endswith</code> 更簡潔,利于減少錯誤
使用 <code>isinstance()</code> 代替對象類型的比較
空序列類型對象的 bool 為 False:
不要用 == 進行 bool 比較