《Python 快速入门》一千个程序员有一千套编码规范
一千個(gè)讀者有一千個(gè)哈姆萊特。? ? ? ? -- 莎士比亞
一千個(gè)程序員有一千套編碼規(guī)范。? ? ?-- 不吃西紅柿
目錄
1、分號(hào)
2、命名
3、行長(zhǎng)度
4、縮進(jìn)
5、空行
6、空格
7、類
8、塊注釋和行注釋
9、字符串
10、導(dǎo)包
【總結(jié)】
1.命名
2.空白
3.語(yǔ)句
4.注釋
Python 編碼規(guī)范重要性的原因用一句話來(lái)概括就是:統(tǒng)一的編碼規(guī)范可以提高開發(fā)效率。
無(wú)論你是 編程者,還是 閱讀者,好的規(guī)范能讓你的效率事半功倍,甚至機(jī)器在運(yùn)行時(shí),提高程序運(yùn)行的效率。今天西紅柿就帶你盤一盤python的編碼規(guī)范。
ps.python的代碼編寫基本上都要遵循PEP8的風(fēng)格
1、分號(hào)
不要在行尾加分號(hào), 也不要用分號(hào)將兩條命令放在同一行。
2、命名
module_name, package_name, ClassName, method_name
應(yīng)該避免的名稱
命名約定
3、行長(zhǎng)度
每行不超過(guò)80個(gè)字符
以下情況除外:
不要使用反斜杠連接行。
Python會(huì)將?圓括號(hào), 中括號(hào)和花括號(hào)中的行隱式的連接起來(lái)?, 你可以利用這個(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 andcolor == 'red' and emphasis == 'strong'):如果一個(gè)文本字符串在一行放不下, 可以使用圓括號(hào)來(lái)實(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、縮進(jìn)
用4個(gè)空格來(lái)縮進(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,...}5、空行
頂級(jí)定義之間空兩行, 方法定義之間空一行
頂級(jí)定義之間空兩行, 比如函數(shù)或者類定義. 方法定義, 類定義與第一個(gè)方法之間, 都應(yīng)該空一行. 函數(shù)或方法中, 某些地方要是你覺(jué)得合適, 就空一行.
6、空格
按照標(biāo)準(zhǔn)的排版規(guī)范來(lái)使用標(biāo)點(diǎn)兩邊的空格
括號(hào)內(nèi)不要有空格.
按照標(biāo)準(zhǔn)的排版規(guī)范來(lái)使用標(biāo)點(diǎn)兩邊的空格
正確示范: spam(ham[1], {eggs: 2}, []) 錯(cuò)誤示范: spam( ham[ 1 ], { eggs: 2 }, [ ] )7、類
類應(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_spamself.eggs = 0def public_method(self):"""Performs operation blah."""8、塊注釋和行注釋
最需要寫注釋的是代碼中那些技巧性的部分. 如果你在下次?代碼審查?的時(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+19、字符串
正確示范: x = a + bx = '%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 casex = '{}{}'.format(a, b) # use + in this casex = imperative + ', ' + expletive + '!'x = 'name: ' + name + '; score: ' + str(n)10、導(dǎo)包
每個(gè)導(dǎo)入應(yīng)該獨(dú)占一行
正確示范:import osimport sys 錯(cuò)誤示范: import os, sys導(dǎo)入總應(yīng)該放在文件頂部, 位于模塊注釋和文檔字符串之后, 模塊全局變量和常量之前. 導(dǎo)入應(yīng)該按照從最通用到最不通用的順序分組:
【總結(jié)】
1.命名
2.空白
3.語(yǔ)句
4.注釋
??
總結(jié)
以上是生活随笔為你收集整理的《Python 快速入门》一千个程序员有一千套编码规范的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 剑指 Offer 35. 复杂链表的复制
- 下一篇: 检测系列--YOLO系列