Python程式設計規範 PEP8 閱讀摘要

2021-06-16 13:21:06 字數 3427 閱讀 2086

工作中寫了個python的模組,codereview的時候被告知有些不符合python規範的地方。於是找到了pep8的全文(閱讀了一番,還是受益匪淺。下面是做的一些摘要。

對於每一次縮排使用4個空格。使用括號、中括號、大括號進行垂直對齊,或者縮排對齊。

永遠不要將製表符與空格混合使用。

python最常用的縮排方式是只是用空格。

當呼叫python命令列的 

-t選項時,它會檢測並警告**非法混合使用製表符和空格。當使用 

-tt選項時,警告變成了錯誤。

限制所有行最長為79個字元。

使用反斜槓來分行是乙個很好的選擇。

我們應當選擇在二元操作符之後進行分行,而不是之前。

使用兩行空行來分隔頂層函式和類定義。

使用單行空行來分隔類方法定義。

在函式中使用空行來表示不同的邏輯塊。

python核心發行**裡面優先使用ascii碼或latin-1編碼。3.0後utf-8編碼優先於latin-1。

每乙個匯入通常應當使用單獨的行。

匯入應當位於檔案頂部,在模組注釋和文件字串之後,在全域性變數和常量之前。

匯入應當按以下順序分組,且每組匯入之間使用空行隔開:

1、標準庫匯入

2、第三方庫匯入

3、本地應用程式/定製庫匯入

使用絕對包路徑匯入。

使用兩行空行來分隔頂層函式和類定義。

誤導的注釋不如沒有注釋

注釋應當為完整的句子,且句號結尾的句子後面應當有2個空格。如果注釋很短,那麼結尾的句號可以忽略。

塊注釋應當和**縮排保持一致。每行注釋開頭應以#開頭,然後緊跟乙個空格。

行注釋至少和語句間隔2個空格。同樣的注釋應當以#開頭,然後緊跟乙個空格。

對於所有的公有模組、類、函式和方法都需要編寫文件字串。

""" 作為多行的文件字串的結束,應該單獨一行,並且之前有乙個空行。

對於只有一行的文件字串來說,結尾的 """ 在同一行。

更詳細的文件字串規範見 pep 257。

目前python庫的命名規範尚未達成一致,但有一些推薦的標準。

在python裡面,有一些具有特定意義的下劃線字首或者後繼的特殊格式。如:

1、 _single_leading_underscore

:(單下劃線開始)弱"內部使用"指示器。例如:

from m import *

不會匯入以下劃線開始的物件。

2、single_trailing_underscore_

:(單下劃線結束)規定使用其來避免與python關鍵字衝突,例如:

tkinter.toplevel(master, class_='classname') 在引數class後面加單下劃線,避免與關鍵字class衝突
3、__double_leading_underscore

:(雙下劃線開始)命名乙個類的屬性時,呼叫"name mangling

"(類foobar中,

__boo

變為了 

_foobar__boo

; 見下文)

4、__double_leading_and_trailing_underscore__

:(雙下劃線開始和結束)存活在使用者控制命名空間的

"magic"物件或屬性

。 例如

__init__

, __import__

或 __file__

。永遠不要起這樣的名字。

不要使用小寫的l、大寫的o、以及大寫的i作為單字元變數名。

模組應當使用簡短、全小寫的名字,也可使用下劃線連線來提高可讀性。

包也應當使用簡短、全小寫的名字,但不要使用下劃線。

這是由於模組名與檔名關聯,而在某些檔案系統中大小寫不敏感,且會截斷過長的名字。

當使用c/c++來編寫乙個擴充套件模組時,應當使用下劃線作為模組名的字首。

類名應當使用駝峰式(capwords)。內部使用的類名應當加下劃線字首。

異常也是乙個類,所以需要遵循類名規則。但如果你的異常確實是個錯誤的話,請使用error字首。

遵循函式規則。

函式名全小寫,可以使用下劃線分隔來提高可讀性。

使用self作為例項方法的第乙個引數。

使用cls作為類方法的第乙個引數。

當函式的引數名與保留字衝突時,使用下劃線字尾(第二次提醒)。

遵循函式規則。

在私有方法和例項變數前用單下劃線字首。

使用雙下劃線字首來呼叫

"name mangling

"來避免與子類命名衝突。

如果類foo有個屬性叫__a,那麼它不能使用foo.__a讀取,但仍然可以foo._foo__a來讀取。

常量通常在模組級別定義,使用全大寫和下劃線分隔的形式。

在設計類的方法或例項變數時,應當覺得其實公有的還是非公有的。當不能確定時,設計為私有的。

在python中沒有真正的私有屬性。

公有屬性不應當使用下劃線開始。

當公有屬性與保留字衝突時,在名稱後面加下劃線字尾(第三次提醒)。

對於簡單的公有屬性,最好直接訪問其屬性名,而非get/set方法。

**應當適用於python的多個實現。比如不要依賴cpython的高效字串語句 a+=b,而應當使用join,從而保證在不同實現上的線性開銷。

當與類似於none的單例(

singleton)進行比較式,要使用is 或者 is not, 而不是使用等於操作。

當使用複雜比較實現排序操作時,最好實現全部的六個比較操作。

使用基於物件的異常。

模組或者包應當定義自己的異常基類,這個類應當繼承自內建的exception類。

當丟擲乙個異常的時候,使用

raise valueerror('message')

代替舊的

raise valueerror, 'message'

格式。這是由於當異常的引數很長或者是格式化字串的時候,由於括號的關係,我們不需要使用多行連線符。 舊的格式在python 3 中被移除。

當捕獲乙個異常的時候,要用詳細的異常宣告來代替簡單的

except:

語句。

乙個空的

except:

語句將會捕獲 systemexit 和 keyboardinterrrupt 異常。這會使得很難用control-c來中斷乙個程式,並且還會隱藏其他的問題。

另外,對於所有的try/except語句,限制

try語句來減少必要**的數量。 再者,可以避免掩蓋問題。

使用''.startswith()

和 ''.endswith()

而非字元切片去檢測字首或字尾。

物件型別比較總要用 isinstance() 而非直接比較。

對於序列,(strings, lists, tuples),利用空串行為false這一點來進行判斷,而非使用長度來判斷。

別用『==』進行布林值和 true 或者 false 的比較。

PEP8 程式設計規範整理

python語言的程式設計規範,提高 可讀性 一 編排 1 縮排。4個空格的縮排 編輯器都可以完成此功能 不使用tap,更不能混合使用tap和空格。2 每行最大長度79,換行可以使用反斜槓,最好使用圓括號。換行點要在操作符的後邊敲回車。3 類和top level函式定義之間空兩行 類中的方法定義之間...

python 常用PEP8規範

一 編排 1 縮排。4個空格的縮排 編輯器都可以完成此功能 不使用tap,更不能混合使用tap和空格。2 每行最大長度79,換行可以使用反斜槓,最好使用圓括號。換行點要在操作符的後邊敲回車。3 類和top level函式定義之間空兩行 類中的方法定義之間空一行 函式內邏輯無關段落之間空一行 其他地方...

PEP8編碼規範

pep8 python 編碼規範 一 編排 1 縮排。4個空格的縮排 編輯器都可以完成此功能 不使用tap,更不能混合使用tap和空格。2 每行最大長度79,換行可以使用反斜槓,最好使用圓括號。換行點要在操作符的後邊敲回車。3 類和top level函式定義之間空兩行 類中的方法定義之間空一行 函式...