0、前言
本文是閱讀《Python Coding Rule》之后總結(jié)的最為精華及簡(jiǎn)單的編碼規(guī)范,根據(jù)每個(gè)人不同喜好有些地方會(huì)有不同的選擇,我只是做了對(duì)自己來(lái)說(shuō)最簡(jiǎn)單易行的選擇,僅供大家參考。
1、重要原則
a.保持風(fēng)格的一致性很重要,但最重要的是:知道何時(shí)不一致b.打破一條既定規(guī)則的兩個(gè)好理由:c.當(dāng)應(yīng)用規(guī)則會(huì)導(dǎo)致代碼可讀性下降(可讀性賽高)d.為了和周?chē)a保持一致而打破規(guī)則(歷史遺留)
2、最簡(jiǎn)規(guī)范
a.只使用空格縮進(jìn)b.使用UTF-8編碼c.每行只寫(xiě)一條語(yǔ)句d.使用行末反斜杠折疊長(zhǎng)行,限制每行最大79字符e.導(dǎo)入包:每行唯一、從大到小、絕對(duì)路徑f.類(lèi)內(nèi)方法空1行分隔,類(lèi)外空2行分隔g.運(yùn)算符除 * 外,兩邊空1格分隔,函數(shù)參數(shù)=周?chē)挥每崭駂.除類(lèi)名使用駝峰法以外,其他模塊、函數(shù)、方法、變量均使用全小寫(xiě)+下劃線i.1個(gè)前導(dǎo)下劃線表示半公開(kāi),2個(gè)前導(dǎo)下劃線表示私有,與保留字區(qū)分使用單個(gè)后置下劃線j.開(kāi)發(fā)時(shí)使用中文注釋?zhuān)l(fā)布時(shí)再寫(xiě)英文文檔
3、詳細(xì)規(guī)范
a.全文通用b.只使用空格縮進(jìn),4個(gè)空格表示1個(gè)縮進(jìn)層次c.每行長(zhǎng)度限制在79字符內(nèi),使用行末反斜杠折疊長(zhǎng)行d.使用UTF-8編碼e.每行只寫(xiě)一條語(yǔ)句
4、代碼命名
一行只import一個(gè)包,Imports的順序?yàn)椋簶?biāo)準(zhǔn)庫(kù)、相關(guān)主包、特定應(yīng)用,每組導(dǎo)入之間放置1行空行,所有導(dǎo)入使用包的絕對(duì)路徑。
分割頂層函數(shù)和類(lèi)的定義使用2行空行,分割類(lèi)內(nèi)方法定義使用1行空行,class行與第一個(gè)方法定義之間要有1行空行。
整體使用英文書(shū)寫(xiě)方式來(lái)使用空格,即僅在逗號(hào)、分號(hào)后面添加1個(gè)空格,其他任何符號(hào)如圓括號(hào)、方括號(hào)、花括號(hào)等都不用空格把符號(hào)與字符分開(kāi),寫(xiě)在一起表示一個(gè)整體;運(yùn)算符除 * 號(hào)以外,其他符號(hào)兩邊都各用1個(gè)空格分隔;函數(shù)參數(shù)=號(hào)周?chē)挥每崭瘛?/p>
模塊名:不含下劃線、簡(jiǎn)短、全小寫(xiě);
類(lèi)名、異常名:首字母大寫(xiě)單詞串的駝峰法;
函數(shù)名、全局變量名、方法名、實(shí)例變量:全小寫(xiě),加下劃線增加可讀性;
一個(gè)前導(dǎo)下劃線僅用于不想被導(dǎo)入的全局變量(還有內(nèi)部函數(shù)和類(lèi))前加一個(gè)下劃線)、不打算作為類(lèi)的公共接口的內(nèi)部方法和實(shí)例變量;
兩個(gè)前導(dǎo)下劃線以表示類(lèi)私有的名字,只用來(lái)避免與類(lèi)(為可以子類(lèi)化所設(shè)計(jì))中的屬性發(fā)生名字沖突。
私有屬性必須有兩個(gè)前導(dǎo)下劃線,無(wú)后置下劃線;
非公有屬性必須有一個(gè)前導(dǎo)下劃線,無(wú)后置下劃線。
公共屬性沒(méi)有前導(dǎo)和后置下劃線,除非它們與保留字沖突,此情況下,單個(gè)后置下劃線比前置或混亂的拼寫(xiě)要好,例如:class_優(yōu)于klass。
5、編寫(xiě)技巧
與None之類(lèi)的單值比較,永遠(yuǎn)用:'is'或'is not'來(lái)做:if x is not None
在模塊和包內(nèi)定義基異常類(lèi)(base exception class)
使用字符串方法(methods)代替字符串模塊。
在檢查前綴或后綴時(shí)避免對(duì)字符串進(jìn)行切片,用startswith()和endswith()代替,如:No: if foo[:3] == 'bar':Yes: if foo.startswith('bar'):
只用isinstance()進(jìn)行對(duì)象類(lèi)型的比較,如:No: if type(obj) is type(1):Yes: if isinstance(obj, int)
判斷True或False不要用 ==,如:No: if greeting == True:Yes: if greeting:
6、注釋
開(kāi)發(fā)時(shí),注釋全部用中文來(lái)寫(xiě),當(dāng)要發(fā)布腳本工具時(shí),再寫(xiě)英文文檔。
注釋?xiě)?yīng)該是是完整的句子(短語(yǔ)也可),首字母大寫(xiě);如果注釋很短,省略末尾句號(hào);注釋塊由一個(gè)or多個(gè)完整句子構(gòu)成的段落組成,則每個(gè)句子使用句子結(jié)尾;句末句號(hào)后使用兩個(gè)空格。
注釋塊每行以#和一個(gè)空格開(kāi)始,并且跟隨注釋的代碼具有相同的縮進(jìn)層次,注釋塊上下方有一空行包圍。
謹(jǐn)慎使用行內(nèi)注釋?zhuān)辽偈褂脙蓚€(gè)空格與語(yǔ)句分開(kāi)。
使用 pydoc; epydoc; Doxgen 等文檔化工具,為所有公共模塊、函數(shù)、類(lèi)和方法邊寫(xiě)文檔字符串,文檔字符串對(duì)非公開(kāi)的方法不是必要的,但你應(yīng)該有一個(gè)描述這個(gè)方法做什么的注釋?zhuān)@個(gè)注釋?xiě)?yīng)該在"def"這行后。
多行文檔字符串結(jié)尾的""" 應(yīng)該單獨(dú)成行。
版本注記:定義一個(gè)變量__version__ = "$Revision: 1.4 $"
Stay hungry. Stay foolish.
-
編碼
+關(guān)注
關(guān)注
6文章
944瀏覽量
54843 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8420瀏覽量
132685 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84727
原文標(biāo)題:Python最簡(jiǎn)編碼規(guī)范
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論