PEP8規(guī)范

比較全的資料

  1. PEP 8 -- Style Guide for Python Code

  2. PEP8中文翻譯

比較需要注意的

縮進(jìn)

  1. 每一級縮進(jìn)使用4個空格。

  2. 續(xù)行應(yīng)該與其包裹元素對齊,要么使用圓括號、方括號和花括號內(nèi)的隱式行連接來垂直對齊,要么使用掛行縮進(jìn)對齊3。當(dāng)使用掛行縮進(jìn)時,應(yīng)該考慮到第一行不應(yīng)該有參數(shù),以及使用縮進(jìn)以區(qū)分自己是續(xù)行。

  3. 推薦:


# 與左括號對齊

foo = long_function_name(var_one, var_two,

                        var_three, var_four)

# 用更多的縮進(jìn)來與其他行區(qū)分

def long_function_name(

        var_one, var_two, var_three,

        var_four):

    print(var_one)

# 掛行縮進(jìn)應(yīng)該再換一行

foo = long_function_name(

    var_one, var_two,

    var_three, var_four)

  1. 不推薦:

# 沒有使用垂直對齊時,禁止把參數(shù)放在第一行

foo = long_function_name(var_one, var_two,

    var_three, var_four)

# 當(dāng)縮進(jìn)沒有與其他行區(qū)分時,要增加縮進(jìn)

def long_function_name(

    var_one, var_two, var_three,

    var_four):

    print(var_one)

行的最大長度

  1. 所有行限制的最大字符數(shù)為79。

  2. 沒有結(jié)構(gòu)化限制的大塊文本(文檔字符或者注釋),每行的最大字符數(shù)限制在72。

空行

頂層函數(shù)和類的定義,前后用兩個空行隔開。

類里的方法定義用一個空行隔開。

Imports 導(dǎo)入

  1. 導(dǎo)入通常在分開的行,例如:

推薦: import os

    import sys

不推薦:  import sys, os

也可以:

from subprocess import Popen, PIPE

  1. 導(dǎo)入總是位于文件的頂部,在模塊注釋和文檔字符串之后,在模塊的全局變量與常量之前。

  2. 導(dǎo)入應(yīng)該按照以下順序分組:

    1. 標(biāo)準(zhǔn)庫導(dǎo)入

    2. 相關(guān)第三方庫導(dǎo)入

    3. 本地應(yīng)用/庫特定導(dǎo)入

    4. 你應(yīng)該在每一組導(dǎo)入之間加入空行。

  3. 推薦使用絕對路徑導(dǎo)入,如果導(dǎo)入系統(tǒng)沒有正確的配置(比如包里的一個目錄在sys.path里的路徑后),使用絕對路徑會更加可讀并且性能更好(至少能提供更好的錯誤信息):

Comments 注釋

  1. 與代碼相矛盾的注釋比沒有注釋還糟,當(dāng)代碼更改時,優(yōu)先更新對應(yīng)的注釋!

  2. 注釋應(yīng)該是完整的句子。如果一個注釋是一個短語或句子,它的第一個單詞應(yīng)該大寫,除非它是以小寫字母開頭的標(biāo)識符(永遠(yuǎn)不要改變標(biāo)識符的大小寫!)。

  3. 如果注釋很短,結(jié)尾的句號可以省略。塊注釋一般由完整句子的一個或多個段落組成,并且每句話結(jié)束有個句號。

  4. 在句尾結(jié)束的時候應(yīng)該使用兩個空格。

  5. 當(dāng)用英文書寫時,遵循Strunk and White (譯注:《Strunk and White, The Elements of Style》)的書寫風(fēng)格。

  6. 在非英語國家的Python程序員,請使用英文寫注釋,除非你120%的確信你的代碼不會被使用其他語言的人閱讀。

Block Comments 塊注釋

  1. 塊注釋通常適用于跟隨它們的某些(或全部)代碼,并縮進(jìn)到與代碼相同的級別。塊注釋的每一行開頭使用一個#和一個空格(除非塊注釋內(nèi)部縮進(jìn)文本)。

  2. 塊注釋內(nèi)部的段落通過只有一個#的空行分隔。

Inline Comments 行內(nèi)注釋

1.有節(jié)制地使用行內(nèi)注釋。

2.行內(nèi)注釋是與代碼語句同行的注釋。行內(nèi)注釋和代碼至少要有兩個空格分隔。注釋由#和一個空格開始。

  1. 事實上,如果狀態(tài)明顯的話,行內(nèi)注釋是不必要的,反而會分散注意力。比如說下面這樣就不需要:

x = x + 1                # Increment x

但有時,這樣做很有用:


x = x + 1                # Compensate for border

Documentation Strings 文檔字符串

  1. 要為所有的公共模塊,函數(shù),類以及方法編寫文檔說明。

  2. 非公共的方法沒有必要,但是應(yīng)該有一個描述方法具體作用的注釋。這個注釋應(yīng)該在def那一行之后。

  3. PEP 257描述了寫出好的文檔說明相關(guān)的約定。特別需要注意的是,多行文檔說明使用的結(jié)尾三引號應(yīng)該自成一行,例如:


"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.

"""

  1. 對于單行的文檔說明,尾部的三引號應(yīng)該和文檔在同一行。

約定俗成的命名約定

Names to Avoid 應(yīng)避免的名字
  1. 永遠(yuǎn)不要使用字母‘l’(小寫的L),‘O’(大寫的O),或者‘I’(大寫的I)作為單字符變量名。

  2. 在有些字體里,這些字符無法和數(shù)字0和1區(qū)分,如果想用‘l’,用‘L’代替。

Class Names 類名
  1. 類名一般使用首字母大寫的約定。

  2. 在接口被文檔化并且主要被用于調(diào)用的情況下,可以使用函數(shù)的命名風(fēng)格代替。

  3. 注意,對于內(nèi)置的變量命名有一個單獨的約定:大部分內(nèi)置變量是單個單詞(或者兩個單詞連接在一起),首字母大寫的命名法只用于異常名或者內(nèi)部的常量。

Function Names 函數(shù)名
  1. 函數(shù)名應(yīng)該小寫,如果想提高可讀性可以用下劃線分隔。

  2. 大小寫混合僅在為了兼容原來主要以大小寫混合風(fēng)格的情況下使用(比如 threading.py),保持向后兼容性。

Function and method arguments 函數(shù)和方法參數(shù)
  1. 始終要將 self 作為實例方法的的第一個參數(shù)。

  2. 始終要將 cls 作為類靜態(tài)方法的第一個參數(shù)。

  3. 如果函數(shù)的參數(shù)名和已有的關(guān)鍵詞沖突,在最后加單一下劃線比縮寫或隨意拼寫更好。因此 class_ 比 clss 更好。(也許最好用同義詞來避免這種沖突)

Programming Recommendations 編程建議

  1. 代碼應(yīng)該用不損害其他Python實現(xiàn)的方式去編寫(PyPy,Jython,IronPython,Cython,Psyco 等)。 比如,不要依賴于在CPython中高效的內(nèi)置字符連接語句 a += b 或者 a = a + b。這種優(yōu)化甚至在CPython中都是脆弱的(它只適用于某些類型)并且沒有出現(xiàn)在不使用引用計數(shù)的實現(xiàn)中。在性能要求比較高的庫中,可以種 ”.join() 代替。這可以確保字符關(guān)聯(lián)在不同的實現(xiàn)中都可以以線性時間發(fā)生。

  2. 和像None這樣的單例對象進(jìn)行比較的時候應(yīng)該始終用 is 或者 is not,永遠(yuǎn)不要用等號運算符。

另外,如果你在寫 if x 的時候,請注意你是否表達(dá)的意思是 if x is not None。舉個例子,當(dāng)測試一個默認(rèn)值為None的變量或者參數(shù)是否被設(shè)置為其他值的時候。這個其他值應(yīng)該是在上下文中能成為bool類型false的值。

  1. 使用 is not 運算符,而不是 not … is 。雖然這兩種表達(dá)式在功能上完全相同,但前者更易于閱讀,所以優(yōu)先考慮。

推薦:


if foo is not None

不推薦:


if not foo is None:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 6,356評論 0 10
  • 〇、前言 本文共108張圖,流量黨請慎重! 歷時1個半月,我把自己學(xué)習(xí)Python基礎(chǔ)知識的框架詳細(xì)梳理了一遍。 ...
    Raxxie閱讀 19,602評論 17 410
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,498評論 2 36
  • 更新時間:2016/5/13 介紹 本文檔所提供的編碼規(guī)范,適用于主要的Python發(fā)行版中組成標(biāo)準(zhǔn)庫的Pytho...
    超net閱讀 5,999評論 0 15
  • 我對六年級和三年級分別進(jìn)行了期中考試,針對這個我談一下我的看法。六年級的孩子基礎(chǔ)差在哪里,就是橄欖和客人交流教師交...
    lygly9閱讀 203評論 0 0

友情鏈接更多精彩內(nèi)容