您好,登錄后才能下訂單哦!
這篇“Python中的編碼規(guī)范有哪些”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Python中的編碼規(guī)范有哪些”文章吧。
Python 編碼規(guī)范重要性的原因用一句話來概括就是:統(tǒng)一的編碼規(guī)范可以提高開發(fā)效率。
ps.python的代碼編寫基本上都要遵循PEP8的風(fēng)格
不要在行尾加分號(hào), 也不要用分號(hào)將兩條命令放在同一行。
module_name, package_name, ClassName, method_name
應(yīng)該避免的名稱
單字符名稱, 除了計(jì)數(shù)器和迭代器.
包/模塊名中的連字符(-)
雙下劃線開頭并結(jié)尾的名稱(Python保留, 例如__init__)
命名約定
所謂"內(nèi)部(Internal)"表示僅模塊內(nèi)可用, 或者, 在類內(nèi)是保護(hù)或私有的.
用單下劃線(_)開頭表示模塊變量或函數(shù)是protected的(使用import * from時(shí)不會(huì)包含)
用雙下劃線(__)開頭的實(shí)例變量或方法表示類內(nèi)私有.
將相關(guān)的類和頂級(jí)函數(shù)放在同一個(gè)模塊里. 不像Java, 沒必要限制一個(gè)類一個(gè)模塊.
對(duì)類名使用大寫字母開頭的單詞(如CapWords, 即Pascal風(fēng)格), 但是模塊名應(yīng)該用小寫加下劃線的方式(如lower_with_under.py). 盡管已經(jīng)有很多現(xiàn)存的模塊使用類似于CapWords.py這樣的命名, 但現(xiàn)在已經(jīng)不鼓勵(lì)這樣做, 因?yàn)槿绻K名碰巧和類名一致, 這會(huì)讓人困擾.
每行不超過80個(gè)字符
以下情況除外:
長(zhǎng)的導(dǎo)入模塊語句注釋里的URL
不要使用反斜杠連接行。
Python會(huì)將 圓括號(hào), 中括號(hào)和花括號(hào)中的行隱式的連接起來 , 你可以利用這個(gè)特點(diǎn). 如果需要, 你可以在表達(dá)式外圍增加一對(duì)額外的圓括號(hào)。
推薦:
foo_bar(self, width, height, color='black', design=None, x='foo', emphasis=None, highlight=0) if (width == 0 and height == 0 and color == 'red' and emphasis == 'strong'):
如果一個(gè)文本字符串在一行放不下, 可以使用圓括號(hào)來實(shí)現(xiàn)隱式行連接:
x = ('這是一個(gè)非常長(zhǎng)非常長(zhǎng)非常長(zhǎng)非常長(zhǎng) ' '非常長(zhǎng)非常長(zhǎng)非常長(zhǎng)非常長(zhǎng)非常長(zhǎng)非常長(zhǎng)的字符串')
用4個(gè)空格來縮進(jìn)代碼
絕對(duì)不要用tab, 也不要tab和空格混用. 對(duì)于行連接的情況, 你應(yīng)該要么垂直對(duì)齊換行的元素(見 :ref:`行長(zhǎng)度 <line_length>` 部分的示例), 或者使用4空格的懸掛式縮進(jìn)(這時(shí)第一行不應(yīng)該有參數(shù)):
# 與起始變量對(duì)齊 foo = long_function_name(var_one, var_two, var_three, var_four) # 字典中與起始值對(duì)齊 foo = { long_dictionary_key: value1 + value2, ... }
頂級(jí)定義之間空兩行, 方法定義之間空一行
頂級(jí)定義之間空兩行, 比如函數(shù)或者類定義. 方法定義, 類定義與第一個(gè)方法之間, 都應(yīng)該空一行. 函數(shù)或方法中, 某些地方要是你覺得合適, 就空一行.
按照標(biāo)準(zhǔn)的排版規(guī)范來使用標(biāo)點(diǎn)兩邊的空格
括號(hào)內(nèi)不要有空格.
按照標(biāo)準(zhǔn)的排版規(guī)范來使用標(biāo)點(diǎn)兩邊的空格
正確示范: spam(ham[1], {eggs: 2}, [])
錯(cuò)誤示范: spam( ham[ 1 ], { eggs: 2 }, [ ] )
類應(yīng)該在其定義下有一個(gè)用于描述該類的文檔字符串. 如果你的類有公共屬性(Attributes), 那么文檔中應(yīng)該有一個(gè)屬性(Attributes)段. 并且應(yīng)該遵守和函數(shù)參數(shù)相同的格式.
class SampleClass(object): """Summary of class here. Longer class information.... Longer class information.... Attributes: likes_spam: A boolean indicating if we like SPAM or not. eggs: An integer count of the eggs we have laid. """ def __init__(self, likes_spam=False): """Inits SampleClass with blah.""" self.likes_spam = likes_spam self.eggs = 0 def public_method(self): """Performs operation blah."""
最需要寫注釋的是代碼中那些技巧性的部分. 如果你在下次 代碼審查 的時(shí)候必須解釋一下, 那么你應(yīng)該現(xiàn)在就給它寫注釋. 對(duì)于復(fù)雜的操作, 應(yīng)該在其操作開始前寫上若干行注釋. 對(duì)于不是一目了然的代碼, 應(yīng)在其行尾添加注釋.
# We use a weighted dictionary search to find out where i is in # the array. We extrapolate position based on the largest num # in the array and the array size and then do binary search to # get the exact number. if i & (i-1) == 0: # true iff i is a power of 2
為了提高可讀性, 注釋應(yīng)該至少離開代碼2個(gè)空格.
另一方面, 絕不要描述代碼. 假設(shè)閱讀代碼的人比你更懂Python, 他只是不知道你的代碼要做什么.
# BAD COMMENT: Now go through the b array and make sure whenever i occurs # the next element is i+1
正確示范: x = a + b x = '%s, %s!' % (imperative, expletive) x = '{}, {}!'.format(imperative, expletive) x = 'name: %s; score: %d' % (name, n) x = 'name: {}; score: {}'.format(name, n)
錯(cuò)誤示范: x = '%s%s' % (a, b) # use + in this case x = '{}{}'.format(a, b) # use + in this case x = imperative + ', ' + expletive + '!' x = 'name: ' + name + '; score: ' + str(n)
每個(gè)導(dǎo)入應(yīng)該獨(dú)占一行
正確示范: import os import sys
錯(cuò)誤示范: import os, sys
導(dǎo)入總應(yīng)該放在文件頂部, 位于模塊注釋和文檔字符串之后, 模塊全局變量和常量之前. 導(dǎo)入應(yīng)該按照從最通用到最不通用的順序分組:
標(biāo)準(zhǔn)庫導(dǎo)入第三方庫導(dǎo)入應(yīng)用程序指定導(dǎo)入
函數(shù)、變量及屬性都應(yīng)該用小寫單詞拼寫,只見用_連接,不遵循駝峰命名法
類與異常應(yīng)該首字母大寫,不要用_連接
受保護(hù)的實(shí)例屬性,應(yīng)以單下劃線開頭
實(shí)例的私有屬性,應(yīng)以雙下劃線開頭
模塊級(jí)別的變量單詞都要大寫,中間以單下劃線隔開
變量要盡可能有意義
和語法相關(guān)的每一層縮進(jìn)都用4個(gè)空格表示
賦值時(shí)等號(hào)兩邊都要有一個(gè)空格
每一行所占用的字符數(shù)應(yīng)不超過79,實(shí)際操作中應(yīng)當(dāng)盡量不讓代碼編輯器的行滾動(dòng)條顯示出來
在使用函數(shù)進(jìn)行函數(shù)式編程時(shí),函數(shù)之間要空兩行
在類中的函數(shù),函數(shù)之間應(yīng)該空一行
函數(shù)與類是同一個(gè)級(jí)別,則他們之間應(yīng)該空兩行
對(duì)于超出每行規(guī)定的字符數(shù)的長(zhǎng)表達(dá)式,應(yīng)當(dāng)敲回車縮進(jìn),通常除了首行其余各行都要在原來的基礎(chǔ)上再次縮進(jìn)4個(gè)空格
判斷變量是否為None、False或True時(shí)不要用==,要用is,例如,if a is None
import語句應(yīng)放在句首,導(dǎo)入時(shí)要盡量使用絕對(duì)導(dǎo)入不要使用相對(duì)導(dǎo)入,并且導(dǎo)入時(shí)最好指定相應(yīng)的模塊的某一具體功能,例如,from datetime import datetime
模塊導(dǎo)入時(shí)應(yīng)根據(jù)標(biāo)準(zhǔn)庫模塊、第三方模塊以及自用模塊進(jìn)行分類
檢測(cè)容器不為空時(shí),應(yīng)使用if 容器名,例如,lists = [] if lists
采用內(nèi)聯(lián)形式的否定詞,不要把否定詞放在整個(gè)表達(dá)式的前面,例如,應(yīng)該if a is not None 而不是 if not a is None
對(duì)某些重要的代碼塊的功能說明,應(yīng)使用單行注釋
對(duì)整個(gè)模塊功能的說明應(yīng)使用多行注釋
對(duì)類或函數(shù)的功能及使用方法的詳細(xì)說明應(yīng)使用文檔字符串
python的注釋盡量使用英文
以上就是關(guān)于“Python中的編碼規(guī)范有哪些”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。