一、PEP 8規(guī)范
官方文檔:https://legacy.python.org/dev/peps/pep-0008/
中文翻譯: https://www.jb51.net/article/103944.htm
二、縮進(jìn)
每一級縮進(jìn)4個(gè)空格。
續(xù)行應(yīng)該與包裹元素對齊,要么使用圓括號,方括號,花括號內(nèi)的隱式行連接來垂直對齊,要么使用掛行縮進(jìn)對齊。當(dāng)使用掛行縮進(jìn)對齊時(shí),應(yīng)該考慮到第一行不應(yīng)該有參數(shù),以及使用縮進(jìn)以區(qū)分自己是續(xù)行。
- 對齊縮進(jìn)(左右括號對齊)
def long_function_name(var_one, var_two,
var_three, var_four):
print(var_one)
- 懸掛縮進(jìn)
def long_function_name(
var_one, var_two,
var_three, var_four):
print(var_one)
- 層級縮進(jìn)
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one, var_two, var_three, var_four)
三、行的最大長度
所有行限制的最大字符數(shù)為79
沒有結(jié)構(gòu)化限制的大塊文本(文檔字符或者注釋),每行的最大字符數(shù)限制在72。
with open("file1", "r") as f1,
open("file2", "r") as f2:
f2.write(f1.read())
四、空行
頂層函數(shù)和類定義,前后用兩個(gè)空行隔開。
類里面方法定義用一個(gè)空行隔開。
class Class01:
pass
class Class02:
def function_01(self):
pass
def function_02(self):
pass
五、命名約定
變量命名
- 永遠(yuǎn)不要使用字母I (小寫的L), O (大寫的O), I (大寫的I)作為單字符的變量名。
- 在有些字體里面,這些字符無法與數(shù)字0和1區(qū)分。如果想用I, 可使用L代替。
函數(shù)命名
- 函數(shù)名應(yīng)該小寫,如果想提高可讀性可以用下劃線分隔。
- 大小寫混合僅在為了兼容原來主要以大小寫混合風(fēng)格的情況下使用,保持向后兼容。
類命名
- 類名一般使用首字母大寫的約定。
- 在接口被文檔化并且主要被用于調(diào)用的情況下,可以使用函數(shù)的命名風(fēng)格代替。
- 注意:對于內(nèi)置的變量命名有一個(gè)單獨(dú)的約定:大部分內(nèi)置變量是單個(gè)單詞(或者兩個(gè)單詞連接在一起),首字母大寫的命名法只用于異常名或者內(nèi)部的常量。
類里面函數(shù)和方法參數(shù)
- 始終要將self作為實(shí)例方法的第一個(gè)參數(shù)。
- 始終要將cls作為類方法的第一個(gè)參數(shù)。
- 如果函數(shù)的參數(shù)名和已有關(guān)鍵字沖突,在最后加大意下劃線比縮寫或者隨意拼寫更好。因此class_比clss更好。
六、字符串引號
單引號和雙引號字符串是相同的。PEP不會為這個(gè)給出建議。選擇一條規(guī)則并堅(jiān)持使用下去。當(dāng)一個(gè)字符串中包含單引號或者雙引號字符串的時(shí)候,使用和最外層不同的符號來避免使用反斜杠,從而提高可讀性。
模塊和包導(dǎo)入規(guī)范
- 命名規(guī)范 模塊名稱要短,使用小寫,并避免使用特殊符號, 比如點(diǎn)和問號
- 因此請盡量保持模塊名簡單,以無需分開單詞最佳(不推薦在兩個(gè)單詞之間使用下劃線)
模塊導(dǎo)入建議
示例 | 結(jié)果 |
from modu import * | 差, 不清楚具體從模塊中導(dǎo)入了哪些內(nèi)容 |
from modu import sqrt | 稍好 |
import modu | 最佳 , 調(diào)用的時(shí)候直接使用modu.sqrt能比較清楚的知道當(dāng)前方法屬于哪個(gè)模塊。 |
import os
import sys
|
推薦 |
import os, sys
|
不推薦 |
from subprocess import Popen, PIPE | 也可以 |
__all__變量
- 如果模塊中存在全局變量__all__, 那么通過__all__ from xxx import *導(dǎo)入時(shí)也只會導(dǎo)入__all__中指定的方法和變量,沒有的話默認(rèn)全部導(dǎo)入。
七、包
- 任意包含__init__.py文件的目錄都被認(rèn)為是一個(gè)python包。
- 因?yàn)閷?dǎo)入包時(shí)會首先執(zhí)行__init__.py文件
- 包中__init__.py文件中__all__變量的作用
- init.py文件中存在全局變量__all__, 通過from xxx import *導(dǎo)入時(shí)也只會導(dǎo)入__all__中指定的方法和變量,沒有的話默認(rèn)全部導(dǎo)入。
八、注釋
與代碼相矛盾的注釋比沒有注釋還糟,當(dāng)代碼更改時(shí),優(yōu)先更新對應(yīng)的注釋! 注釋應(yīng)該是完整的句子。如果一個(gè)注釋是一個(gè)短語或者句子,它的第一個(gè)單詞應(yīng)該大寫,除非它是以小寫字母開頭的標(biāo)識符(永遠(yuǎn)不要改變標(biāo)識符的大小寫!)。 如果注釋很短,結(jié)尾的句號可以省略。塊注釋一般由完整句子的一個(gè)或多個(gè)段落組成,并且每句話結(jié)束有個(gè)句號。 在句尾結(jié)束的時(shí)候應(yīng)該使用兩個(gè)空格。 在非英語國家的python程序員,請使用英文寫注釋,除非120%的確信你的代碼不會被使用其他語言的人閱讀。
塊注釋
塊注釋通常適用于跟隨它們的某些(或全部)代碼,并縮進(jìn)到與代碼相同的級別。塊注釋的每一行開頭使用一個(gè)#和一個(gè)空格(除非塊注釋內(nèi)部縮進(jìn)文本)。
塊注釋內(nèi)部的段落通常只有一個(gè)#的空行分隔。
行內(nèi)注釋
有節(jié)制地使用行內(nèi)注釋
行內(nèi)注釋是與代碼語句同行的注釋。行內(nèi)注釋和代碼至少要有兩個(gè)空格分隔。注釋由#和一個(gè)空格開始。
文檔注釋
要為所有的公共模塊,函數(shù),類和方法編寫文檔說明。
非公共的方法沒有必要,但是應(yīng)該有一個(gè)描述方法具體作用的注釋。這個(gè)注釋應(yīng)該在def那一行之后。
PEP257描述了寫出好的文檔注釋的相關(guān)約定。特別需要注意的是:多行文檔注釋使用的結(jié)尾三引號應(yīng)該是自成一行,例如:
"""這是注釋
注釋的具體內(nèi)容
"""
對于單行的文檔說明,尾部的三引號應(yīng)該和文檔在同一行。
到此這篇python編碼規(guī)范的文章就介紹到這了,更多python編碼規(guī)范內(nèi)容請搜索W3Cschool以前的文章或繼續(xù)瀏覽下面的相關(guān)文章。