Python3編碼規范


Python核心發行代碼里面優先使用ASCII碼或Latin-1編碼。3.0后UTF-8編碼優先於Latin-1。

一 空格與縮進:
縮進
對於每一次縮進使用4個空格。使用括號、中括號、大括號進行垂直對齊,或者縮進對齊。
制表符還是空格?
永遠不要將制表符與空格混合使用。Python最常用的縮進方式是只是用空格。
當調用Python命令行的 -t 選項時,它會檢測並警告代碼非法混合使用制表符和空格。當使用 -tt 選項時,警告變成了錯誤。
二. 主要命名規范
模塊名采用小寫字母並且以下划線分隔單詞的形式;

包名應當簡短,使用全小寫,但是不要使用下划線

類名采用以大寫字母開頭,並且以大寫字母分隔單詞的形式命名(駝峰式命名);

全局或者類常量,全部使用大寫字母,並且以下划線分隔單詞;其余變量命名則是采用全部小寫字母,並且以下划線分隔單詞的形式命名。

以上的內容如果是內部的,則使用下划線開頭命名。

 

類型

公共(全局)

內部

模塊名

lower_with_under

_ lower_with_under

包名

lowerwithoutunder

 

類名

CapWords

_ CapWords

異常名

CapWords

 

函數名

lower_with_under( )

_ lower_with_under( )

全局/類常量

CAPS_WITH_UNDER

_ CAPS_WITH_UNDER

全局/類變量

lower_with_under

_ lower_with_under

實例變量

lower_with_under

_ lower_with_under(單下划線私有)

__lower_with_under(雙下划線避免與子類沖突)

方法名

lower_with_under( )

_ lower_with_under()(單下划線私有)

__lower_with_under()(雙下划線避免與子類命名沖突)

函數/方法參數

lower_with_under

 

本地變量

lower_with_under

 

注:

1、from M import * 不會導入以下划線開始的對象。

2、異常也是一個類,所以需要遵循類名規則。但如果你的異常確實是個錯誤的話,請使用Error前綴

3、函數與方法參數設置時,使用self作為實例方法的第一個參數。使用cls作為類方法的第一個參數。當函數的參數名與保留字沖突時,使用下划線后綴(第二次提醒)。

4、方法名與實例變量設置時,在私有方法和實例變量前用單下划線前綴。使用雙下划線前綴來調用"name mangling"來避免與子類命名沖突。如果類Foo有個屬性叫__a,那么它不能使用Foo.__a讀取,但仍然可以Foo._Foo__a來讀取

5、應避免使用的命名:不要使用小寫的L、大寫的O、以及大寫的I作為單字符變量名。__double_leading_and_trailing_underscore__:(雙下划線開始和結束)存活在用戶控制命名空間的"magic"對象或屬性。例如__init__, __import__ 或 __file__。永遠不要起這樣的名字。

三.行規范
1、最大行長度
限制所有行最長為79個字符。

使用反斜杠來分行是一個很好的選擇。

我們應當選擇在二元操作符(binary operator,如下述代碼中的and、or以及%)之后進行分行,而不是之前。

2、空行
頂級函數(當前文件中的第一個函數)或者頂級類(當前文件的第一個類)之前要有兩個空行

定義在類內部的函數(成員函數)之間要留有一個空行

可以使用額外的空行(但要注意節制)以區分不同的函數組,

在一堆只有一行的函數之間不要使用空行(比如一些函數的空實現)

在函數內部使用空行,來標識不同的邏輯單元

四.注釋
 誤導的注釋不如沒有注釋,注釋應當為完整的句子,且句號結尾的句子后面應當有2個空格。如果注釋很短那么結尾的句號可以忽略。

1、塊注釋
塊注釋應當和代碼縮進保持一致。每行注釋開頭應以#開頭,然后緊跟一個空格。

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

五.文檔字符串
在python中,不對單引號和雙引號作區分,PEP的代碼規范也不對此有所推薦。任選其一,統一使用即可。然而,當一個字符串包含單引號或者雙引號時,使用另外一種方式避免轉義符(\)的使用,以提高可讀性。

對於所有的公有模塊、類、函數和方法都需要編寫文檔字符串。

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

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

 

六.其他建議
1、總是在下列二元操作符的兩端使用單個空格:賦值操作符(=),參數賦值(+=,-= 等),比較操作符(==,<, >, !=, <>, ⇐, >=, in, not in, is, is not),布爾操作符(and,or, not)。

2、加入使用了多個具有不同優先級的操作符,考慮在低優先級的操作符兩側使用空格。請自行判斷,無論怎樣,不要使用多余一個空格,並且保持二元操作符兩端的空格數量一致。

#符合約定的代碼

i = i + 1

submitted +=1

x = x*2 - 1

hypot2 = x*x + y*y

c =(a+b) * (a-b)

#不符合約定的代碼

i=i+1

submitted +=1

x = x * 2 - 1

hypot2 = x * x + y * y

c =(a + b) * (a - b)

3、不要在指示關鍵字參數或參數默認值的 = 符號兩端使用空格。 


#符合約定的代碼

defcomplex(real, imag=0.0):

    return magic(r=real, i=imag)

#不符合約定的代碼

defcomplex(real, imag =0.0):

    return magic(r = real, i = imag)

4、不建議使用符合語句(在一個物理行中存在多條語句)。 



   #符合建議的代碼

if foo =='blah':

    do_blah_thing()

do_one()

do_two()

do_three()

#不符合建議的代碼

if foo =='blah':do_blah_thing()

do_one(); do_two(); do_three()

5、雖然有時把較短小的 if/for/while 語句放在同一物理行內也是可以的,但千萬不要對多子句的語句也這樣做,同時也是為了避免折疊長行。 



#不符合約定的代碼

if foo =='blah':do_blah_thing()

for x in lst: total += x

while t <10: t = delay()

#絕對不要這樣寫

if foo =='blah':do_blah_thing()

else: do_non_blah_thing()

 

try: something()

finally: cleanup()

 

do_one(); do_two(); do_three(long, argument,

                             list, like, this)

if foo =='blah': one(); two(); three()


免責聲明!

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



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