Python規(guī)范PEP8的閱讀筆記

重要的事情說三遍:可讀性很重要;

PEP8規(guī)范的官方地址

PEP8規(guī)范要點筆記:

一、代碼布局問題

1.縮進

每一級縮進四個空格。

參數(shù)縮進案例如下:

# Aligned with opening delimiter.

foo = long_function_name(var_one, var_two,

var_three, var_four)

# More indentation included to distinguish this from the rest.

def long_function_name(

var_one, var_two, var_three,

var_four):

print(var_one)

# Hanging indents should add a level.

foo = long_function_name(

var_one, var_two,

var_three, var_four)

2.空格和制表符

絕對不要混合使用制表符和空格,可以用python -t來檢查是否存在混合使用的情況,混合使用容易造成問題。

3.行的最大長度

限制所有行的最大長度為79個字符,

4.空行

頂層函數(shù)和類之間兩個空行

類的方法之間一個空行

謹(jǐn)慎的使用空行,將相關(guān)函數(shù)一組組的分割開來,謹(jǐn)慎意味著盡量少用

函數(shù)或者方法體內(nèi),謹(jǐn)慎的使用空行,表示不同的邏輯段落,謹(jǐn)慎意味著盡量少用

5.編碼

python2.x的核心編碼為ascII或者latin-1(iso-8859-1)編碼,而python3的編碼方式為utf-8,

6.導(dǎo)入

導(dǎo)入模塊module使用單獨的行

import os,sys應(yīng)該改為如下方式

import os

import sys

導(dǎo)入同一個包或者模塊的類

from subprocess import? Popen,PIPE

導(dǎo)入順序:分三組導(dǎo)入,組與組之間用一個空行分割

standard library imports 標(biāo)準(zhǔn)庫導(dǎo)入

related third party imports 相關(guān)第三方導(dǎo)入

local application/library specific imports 本地應(yīng)用程序/庫的特定導(dǎo)入

絕對路徑:不推薦使用.相對路徑,推薦絕對路徑導(dǎo)入

防止命名沖突的方法:

import myclass

import foo.bar.yourclass



二、表達式和語句中的空格問題

1. 表達式中盡量避免空格:

2. 緊貼在三種括號前

3. 緊貼在逗號,分號,冒號前,但是之后留一空格以便閱讀

4. 二元運算符,以及算數(shù)運算符前后一個空格即可,不要多余空格

5. 關(guān)鍵字參數(shù)不要前后增加一個空格。

三、注釋

1. 首字母大寫,句號結(jié)尾,結(jié)尾后兩個空格。英語注釋。(國內(nèi)還是習(xí)慣中文,雖然官方建議英文注釋。)

2. 塊注釋,以#開頭,其后緊跟一個空格

3. 行內(nèi)注釋,與執(zhí)行語句相隔至少兩個空格,以#開頭,其后緊根一個空格。

4. 編寫良好的文檔字符串,這很有意義。

"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.

"""

四、命名風(fēng)格

1. 不用l(L的小寫),I(大寫的i),O(大寫的o),做變量名

2. 從大到小,項目名稱,包名,模塊名,類名,函數(shù)名,變量名,參數(shù)名

? ? 項目名稱隨意

? ? 包名,模塊名,小寫,可用下劃線分割,便于閱讀

? ? 類名,首字母大寫,內(nèi)部類建議加上前導(dǎo)下劃線

? ? 異常,異常也是類,首字母大寫,而且添加Error作為自定義異常的名稱后綴,方便后續(xù)引用。

? ? 函數(shù)名,小寫,可用下劃線分割

? ? 變量名,小寫,可用下劃線。如果是常量的話,全部大寫。

? ? 參數(shù)名,參數(shù)名如果與保留字沖突,建議結(jié)尾下劃線。

3. 下劃線規(guī)則

? ? 私有方法和實例變量,使用單下劃線開頭

? ? 使用前導(dǎo)雙下劃線調(diào)用Python的名字變化規(guī)則來避免與子類中的名字沖突

4. 用戶代碼不應(yīng)定義以Py或_Py開頭的名稱,此類型名稱python內(nèi)部使用來確定函數(shù)是Python/C API函數(shù)。如果用戶自用,會危及用戶代碼對未來Python版本的可移植性。

五、程序設(shè)計建議

建議1. 例如,不要依賴于CPython的高效內(nèi)置字符連接語句a += bora = a + b.這些語句在Jython中運行較慢。在性能敏感的庫中,應(yīng)該用''.join()來取代。這樣可以保證在不同的實現(xiàn)中,字符鏈接花費的時間都呈線性。

建議2. 與諸如None這樣的字符比較時,要使用is or is not,永遠不要用等于操作。

# 以下語句執(zhí)行成功,None

str =""

ifstris not None:

print("空字符串不等于None")

建議3. 為了實現(xiàn)復(fù)雜的排序操作,最好通過實現(xiàn)6個操作六個操作(__eq__,__ne__,__lt__,__le__,__gt__,__ge__)完成,而非自定義一些特別的代碼

建議4. 使用Based-object Exception,自定義類應(yīng)該繼承Exception,并且Error后綴名,非錯誤類異常可以不用Error后綴。

class MessageError(Exception):

"""Base class for errors in the email package."""

使用具體的異常聲明代替光禿禿的的exception:。例如:(ps:若想捕捉所有異常,至少使用except Exception:)

try:

import platform_specific_module

except ImportError:

platform_specific_module = None

建議5. 關(guān)于字符串操作

使用String方法而非String模塊

使用''.startswith()和''.endswith()而非字符切片去檢測前綴或后綴。

建議6. 對象類型比較使用isinstance()方法

檢查一個變量是否字符串類型的方法:if isinstance(obj, basestring):

建議7.對于序列,(strings, lists, tuples),利用空序列為false這一點,作為判斷條件

if not seq:

if seq:


建議8. 別用‘==’進行布爾值和 True 或者 False 的比較

六、引用

七、docString,代碼字符串和pydoc的使用

單行文檔字符串,建議首字母大寫,尾部句號,感嘆號結(jié)尾。例如:

defreverse_sort(items):

"""Sort items in reverse order."""

多行注釋要求:第一行概述,首字母大寫,句號結(jié)尾

第二行空行

第三行細(xì)節(jié)描述,同時注意與第一行的第一個引號對齊,最后"""結(jié)尾

"""OS routines for NT or Posix depending on what system we're on.


This exports:

......

"""


更多細(xì)節(jié),請參考Github開源項目python編碼風(fēng)格指南



其他值得閱讀的PEPs,參考知乎網(wǎng)友答案。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容