PEP8 python 編碼規(guī)范

代碼編排
  • 縮進(jìn)。4個空格的縮進(jìn)(編輯器都可以完成此功能),不使用Tab,更不能混合使用Tab和空格。
  • 每行最大長度79,換行可以使用反斜杠,最好使用圓括號,換行點(diǎn)要在操作符的后面敲回車
  • 類和top-level函數(shù)定義之間空兩行,類中的方法定義之間空一行,函數(shù)內(nèi)邏輯無關(guān)段落之間空一行,其他地方盡量不要空行
文檔編排
  • 模塊內(nèi)容的順序,模塊說明和docstring--import --globals$constanst--其他定義,其中import部分,又按標(biāo)準(zhǔn)、三方和自己辨析順序依次排放,之間空一行。
  • 不要再一句話import中引入多個庫,比如import os, sys不推薦
  • 如果采用from XX import XX引用庫,可以省略model. ,都是可能出現(xiàn)命名沖突,這時就要采用import XX。
空格的使用

總體原則,避免不必要的空格

  • 各種又括號前面不要加空格
    -逗號、冒號、分號前不要加空格
  • 函數(shù)的左括號前不要加空格
  • 序列的左括號前不要加空格
  • 操作符左右各加一個空格,不要為了對其增加空格
  • 函數(shù)默認(rèn)參數(shù)使用的賦值符左右省略空格
    -不要將多句語句寫在同一行,盡管使用“;”允許。
  • if/for/while語句中,機(jī)試執(zhí)行語句只有一句,也必須另起一行
注釋

總體原則,錯誤的注釋不如沒有注釋,所以當(dāng)一段代碼發(fā)生變化時,第一件事就是要修改注釋!注釋必須使用英文,最好是完整的句子,首字母大寫,局后腰有結(jié)束符,結(jié)束符后面跟兩個空格,開始下一句,如果是短語,可以省略結(jié)束符

  • 塊注釋,在一段代碼前增加注釋,在“#”后加一空格,段落之間以只有“#”的行間隔,比如:
# Description : Module config.
#
#input : None
# 
# Output : None
  • 行注釋,再一句代碼后加注釋,比如:
    但是這種方式盡量少用
x = x + 1  # Increment x
  • 避免無謂的注釋
文檔描述
  • 為所有的共有模塊、函數(shù)、類、方法寫docstrings(函數(shù)或者模塊的幫助文檔);非共有的沒有必要,但是可以寫注釋(在def的下一行)
  • 如果docstring要換行,參考如下例子:
""" Return a foobang

Optional plotz says to frobnicate the bizbaz first.

""" 
命名規(guī)范

總體原則,新編代碼必須按照下面命名風(fēng)格進(jìn)行,現(xiàn)有庫的編碼盡量保持風(fēng)格

  • 盡量單獨(dú)使用小寫字母‘l’,大寫字母‘O’等容易混淆的字母
  • 模塊名盡量短小,使用全部小寫的方式,可以使用下劃線
  • 包命名盡量短小,使用全部小寫方式,不可以使用下劃線
  • 類的命名使用CapWords的方式,模塊內(nèi)部使用的類采用_CapWords的方式
  • 異常命名使用CapWords+Error后綴的方式
    -全局變量盡量只在模塊內(nèi)有效,類似C語言中的static,實(shí)現(xiàn)方法有兩種,一是all機(jī)制,二是前綴一個下劃線
  • 函數(shù)命名使用全部小寫的方式,可以使用下劃線
    常量命名使用全部大寫的方式,可以試用下劃線
  • 類的屬性(方法和變量)命名使用全部小寫方式,可以使用下劃線
  • 類的屬性有三種作用域:public、non-public、subclass API,可以理解成c++中的public、private、protected、non-public屬性前,前綴一條下劃線
  • 類的屬性若以關(guān)鍵字名字沖突,后綴一下劃線,盡量不要使用縮略等其他方式
  • 為避免與子類屬性命名沖突,在類的一些屬性前,前綴兩條下劃線,比如: 類Foo中聲明__a,訪問時,只能通過Foo._Foo__a,避免歧義,如果子類也叫Foo,那就無能為力了
  • 類的方法第一個參數(shù)必須是self,而靜態(tài)方法第一個參數(shù)必須是cls
編碼建議
  • 編碼中考慮到其他python實(shí)現(xiàn)的效率問題,比如運(yùn)算“+”在CPython(Python)中效率很高,都是jython中卻非常低,多以應(yīng)該采用.join()的方式
  • 盡可能使用“is”、“is not”取代“==”,比如 if x is not None 要優(yōu)于if x
  • 使用基于類的異常,每個模塊或包都有自己的異常類,此異常類繼承自Exception
    異常中不要使用裸露的except,except后跟具體的exceptions
  • 異常中try的代碼盡可能少,比如:
try:
  value = collection[key]
except KeyError:
  return key_not_found(key)
else:
return handle_value(value)

要優(yōu)于

try:
  # Too broad!
  return handle_value(collection[key])
except KeyError:
  # Will also catch KeyError raised by handle_value()
  return key_not_found(key)
使用startswith() and endswith()代替切片進(jìn)行序列前綴或后綴的檢查。比如:

Yes: if foo.startswith('bar'):優(yōu)于
No: if foo[:3] == 'bar':

使用isinstance()比較對象的類型。比如

Yes: if isinstance(obj, int): 優(yōu)于
No: if type(obj) is type(1):

判斷序列空或不空,有如下規(guī)則

Yes: if not seq:
if seq:
優(yōu)于
No: if len(seq)
if not len(seq)

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

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

  • 代碼編排 縮進(jìn)。4個空格的縮進(jìn)(編輯器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。 每行最大長度...
    Spareribs閱讀 27,531評論 2 26
  • --< > 令人討厭的小人物身上有著愚蠢的一致性 --(A Foolish Consistency is the ...
    LittleWizard閱讀 3,354評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,512評論 19 139
  • 作者:李旺成 時間:2016年4月3日 1. 前言 這份文檔參考了 Google Java 編程風(fēng)格規(guī)范和 Goo...
    diygreen閱讀 40,227評論 19 224
  • 一 代碼編排 縮進(jìn) 4個空格的縮進(jìn)(編輯器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。 每行最大...
    隨風(fēng)化作雨閱讀 398評論 0 1

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