❶ 你寫的python編碼,別人知道嗎
Python 編碼規范重要性的原因用一句話來概括就是:統一的編碼規范可以提高開發效率。
無論你是 編程者,還是 閱讀者,好的規范能讓你的效率事半功倍,甚至機器在運行時,提高程序運行的效率。今天就帶你盤一盤python的編碼規范。
ps.python的代碼編寫基本上都要遵循PEP8的風格
1、分號
不要在行尾加分號, 也不要用分號將兩條命令放在同一行。
2、命名
mole_name, package_name, ClassName, method_name
應該避免的名稱
單字元名稱, 除了計數器和迭代器.
包/模塊名中的連字元(-)
雙下劃線開頭並結尾的名稱(Python保留, 例如__init__)
命名約定
所謂"內部(Internal)"表示僅模塊內可用, 或者, 在類內是保護或私有的.
用單下劃線(_)開頭表示模塊變數或函數是protected的(使用import * from時不會包含).
用雙下劃線(__)開頭的實例變數或方法表示類內私有.
將相關的類和頂級函數放在同一個模塊里. 不像Java, 沒必要限制一個類一個模塊.
對類名使用大寫字母開頭的單詞(如CapWords, 即Pascal風格), 但是模塊名應該用小寫加下劃線的方式(如lower_with_under.py). 盡管已經有很多現存的模塊使用類似於CapWords.py這樣的命名, 但現在已經不鼓勵這樣做, 因為如果模塊名碰巧和類名一致, 這會讓人困擾.
3、行長度
每行不超過80個字元
以下情況除外:
長的導入模塊語句
注釋里的URL
不要使用反斜杠連接行。
Python會將 圓括弧, 中括弧和花括弧中的行隱式的連接起來 , 你可以利用這個特點. 如果需要, 你可以在表達式外圍增加一對額外的圓括弧。
推薦:
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'):
如果一個文本字元串在一行放不下, 可以使用圓括弧來實現隱式行連接:
x = ('這是一個非常長非常長非常長非常長 '
'非常長非常長非常長非常長非常長非常長的字元串')
4、縮進
用4個空格來縮進代碼
絕對不要用tab, 也不要tab和空格混用. 對於行連接的情況, 你應該要麼垂直對齊換行的元素(見 :ref:`行長度 ` 部分的示例), 或者使用4空格的懸掛式縮進(這時第一行不應該有參數):
5、空行
頂級定義之間空兩行, 方法定義之間空一行
頂級定義之間空兩行, 比如函數或者類定義. 方法定義, 類定義與第一個方法之間, 都應該空一行. 函數或方法中, 某些地方要是你覺得合適, 就空一行.
6、空格
按照標準的排版規范來使用標點兩邊的空格
括弧內不要有空格.
按照標準的排版規范來使用標點兩邊的空格
7、類
類應該在其定義下有一個用於描述該類的文檔字元串. 如果你的類有公共屬性(Attributes), 那麼文檔中應該有一個屬性(Attributes)段. 並且應該遵守和函數參數相同的格式.
8、塊注釋和行注釋
最需要寫注釋的是代碼中那些技巧性的部分. 如果你在下次 代碼審查 的時候必須解釋一下, 那麼你應該現在就給它寫注釋. 對於復雜的操作, 應該在其操作開始前寫上若干行注釋. 對於不是一目瞭然的代碼, 應在其行尾添加註釋.
# 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
為了提高可讀性, 注釋應該至少離開代碼2個空格.
另一方面, 絕不要描述代碼. 假設閱讀代碼的人比你更懂Python, 他只是不知道你的代碼要做什麼.
# BAD COMMENT: Now go through the b array and make sure whenever i occurs
# the next element is i+1
9、字元串
正確示範:
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)
錯誤示範:
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)
10、導包
每個導入應該獨佔一行
導入總應該放在文件頂部, 位於模塊注釋和文檔字元串之後, 模塊全局變數和常量之前. 導入應該按照從最通用到最不通用的順序分組:
【總結】
1.命名
2.空白
3.語句
4.注釋