Python代碼編寫規(guī)范——PEP 8
?

個(gè)人學(xué)習(xí)記錄,若有侵權(quán),請(qǐng)聯(lián)系刪除。

一、代碼布局
1、分號(hào)
不要在行尾加分號(hào),也不要用分號(hào)將兩條命令放在同一行
2、縮進(jìn)
每級(jí)縮進(jìn)使用四個(gè)空格(不要使用tab)
推薦寫法
不推薦寫法
(1)續(xù)行:續(xù)行應(yīng)與其包裹元素對(duì)齊
①推薦寫法
②不推薦寫法
(2)括號(hào):右括號(hào)(小括號(hào)、中括號(hào)、花括號(hào))可以放在最后一行第一個(gè)非空字符的正下方/放在最后以行下方的開頭
①推薦寫法一
②推薦寫法二
(3)多行if
推薦寫法
3、行長度
(1)所有行限制的最大字符數(shù)為79
(2)較少結(jié)構(gòu)化限制的長文本流(文檔字符或注釋),每行最大字符數(shù)限制在72
注:可以通過將括號(hào)中的表達(dá)式換行來將長行折斷成多行。
①推薦寫法一
②推薦寫法二
4、空行
(1)頂層函數(shù)和類的定義,前后用兩個(gè)空行隔開
(2)類里面的方法定義用一個(gè)空行隔開
5、空格
(1)括號(hào)內(nèi)不要有空格
(2)逗號(hào),分號(hào),冒號(hào)前不加空格,在后面加空格(除行尾外)
(3)在二元操作符兩邊都加上一個(gè)空格,如賦值(=),比較(==, <, >, !=, <>, <=, >=, in, not in, is, isnot),布爾(and, or, not)
(4)當(dāng)“=”用于指示關(guān)鍵字參數(shù)或默認(rèn)參數(shù)值時(shí),不要在其兩側(cè)使用空格
注:當(dāng)將參數(shù)注釋與默認(rèn)值結(jié)合使用時(shí),在“=”兩側(cè)使用空格
(5)切片參數(shù)被忽略時(shí),空格被忽略
二、注釋
1、行內(nèi)注釋
行內(nèi)注釋是和語句在同一行,至少用兩個(gè)空格和語句分開。行內(nèi)注釋不是必需的
2、文檔字符串
為所有公共模塊、函數(shù)、類和方法書寫文檔字符串。
注:多行文檔字符串時(shí),注意結(jié)尾的"""應(yīng)該單獨(dú)成行;單行時(shí)結(jié)尾的"""在同一行
(1)函數(shù)和方法
標(biāo)題行(如Args、Returns)以冒號(hào)結(jié)尾,除標(biāo)題行外,節(jié)的其他內(nèi)容應(yīng)被縮進(jìn)
Args
列出每個(gè)參數(shù)的名字,并在名字后使用一個(gè)冒號(hào)和一個(gè)空格,分隔對(duì)該參數(shù)的描述(包括所需的類型和含義)。如果一個(gè)函數(shù)接受*args(可變長度參數(shù)列表)或**kwargs(任意關(guān)鍵字參數(shù)), 應(yīng)該詳細(xì)列出**args和**kwargs。如果描述太長超過了單行79字符,使用2或4個(gè)空格的懸掛縮進(jìn)。
Rerturns/Yields(Yields用于生成器)
描述返回值的類型和語義。如果函數(shù)返回None,這一部分可以省略。
Raises
列出與接口有關(guān)的所有異常
(2)類
類應(yīng)該在其定義下有一個(gè)用于描述該類的文檔字符串。如果類中有公共屬性,那么文檔中應(yīng)該有一個(gè)屬性(Attributes)段,并且應(yīng)該遵守和函數(shù)參數(shù)相同的格式。
3、TODO注釋
為臨時(shí)代碼使用TODO注釋;TODO注釋應(yīng)該在所有開頭處包含"TODO"字符串,緊跟著是用括號(hào)括起來的名字,email地址或其他標(biāo)識(shí)符,然后是一個(gè)可選的冒號(hào)。接著必須有一行注釋,解釋要做什么。
三、字符串
1、避免在循環(huán)中用+和+=操作符來累加字符串
由于字符串不可變的,這樣做會(huì)創(chuàng)建不必要的臨時(shí)對(duì)象,并且導(dǎo)致二次方而不是線性的運(yùn)行時(shí)間。可以就每個(gè)子串加入列表,然后在循環(huán)結(jié)束后用.join連接列表。
2、在同一個(gè)文件中, 保持使用字符串引號(hào)的一致性. 使用單引號(hào)'或者雙引號(hào)"之一用以引用字符串, 并在同一文件中沿用. 在字符串內(nèi)可以使用另外一種引號(hào), 以避免在字符串中使用.?
3、為多行字符串使用三重雙引號(hào)"""而非三重單引號(hào)'''. 當(dāng)且僅當(dāng)項(xiàng)目中使用單引號(hào)'來引用字符串時(shí), 才可能會(huì)使用三重'''為非文檔字符串的多行字符串來標(biāo)識(shí)引用. 文檔字符串必須使用三重雙引號(hào)""".
四、導(dǎo)入格式
導(dǎo)入應(yīng)該放在文件頂部,位于模塊注釋和文檔字符串之后,模塊全局變量和常量之前。導(dǎo)入應(yīng)該按照從最通用到最不通用的順序分組(各組的導(dǎo)入之間要有空行):
①標(biāo)準(zhǔn)庫導(dǎo)入
②第三方庫導(dǎo)入
③應(yīng)用程序指定導(dǎo)入
五、命名
1、應(yīng)該避免的名稱
(1)單字符名稱,除了計(jì)數(shù)器和迭代器(例如i)
(2)包/模塊名中的連字符(-)(例如study-id)
(3)雙下劃線開頭并結(jié)尾的名稱(Python保留,例如__init__)
2、命名約定
(1)所謂“內(nèi)部(Internal)”表示僅模塊內(nèi)可用,或者在類內(nèi)是保護(hù)或私有的
(2)用單下劃線(_)開頭表示模塊變量或函數(shù)是protected的(使用import * from時(shí)不會(huì)包含)
(3)用雙下劃線(__)開頭的實(shí)例變量或方法表示類內(nèi)私有
(4)將相關(guān)的類和頂級(jí)函數(shù)放在同一個(gè)模塊里
(5)對(duì)類名使用大寫字母開頭的單詞(如CapWords, 即Pascal風(fēng)格), 但是模塊名應(yīng)該用小寫加下劃線的方式(如lower_with_under.py)
3、Python之父Guido推薦的規(guī)范
