Python編碼規範,python編碼
Python官方文檔: https://www.python.org/dev/peps/pep-0008/
代碼風格:
- 使用4個空格來表示縮排,最好不使用tab,更勿將兩者混用
- 函數間換行至少一行
- 類之間換行至少兩行
- 字典,列表,元祖中元素應該在逗號前添加一個空格
- 字典中鍵後面的冒號:應在值與冒號:之間添加空格,而不是:與鍵之前間. 比如說: {‘name’:‘tom’}
- 較長代碼(>79字元)使用\換行。換行後新行的起始處應該與前一個分隔字元對齊(是參數換行則與左括弧對齊
- import位於module comments與docstring之後,常量聲明之前
- 如多模組,請分開匯入. 像import os, sys是不規範的.
- Docstring的常規寫法
"""Return foobang
Optional plotz says to frobnicate the bizbaz first.
"""
- Python 3.0以下版本的代碼檔案建議以latin字元編碼。3.0以上則推薦utf-8
- 代碼中有操作符運算,請注意優先順序,優先的操作緊縮,或者加括弧
- “=”,”==”左右兩邊加一個空格如: if x == 1: print(‘OK’), 但在函數或方法中最好不用空格
比如說:def func(file=’d://1.txt’)
- 盡量不要將多行代碼放在同一行
- 少使用行後注釋
- 用#開頭的多行函數注釋,保持與目標函數相同的縮排
- docstring ,開頭一行寫上返回值,接下來一行寫函數功能描述,後可按照格式>>> func(arg1, arg2, arg3) / r 返回值,以便於測試.
- 另外,若要使用subversion,cvs等原始程式碼控制工具。可以在函數的docstring 之後,code之前寫上__version__ = "$Revision:$"
命名規則:
- 盡量少用 'l' , 'O' , or 'I',單字母作為變數的命名.---說老實話,這樣很容易混淆,搞不清楚誰是誰!
- 包和模組應該用短且全小寫字母:modulename
- 類名首字母大寫的形式命名:ClassName
- 異常類則用以Error結尾的字串命名為宜: YourError
- 全域變數盡量只是設計用於模組內使用,並且可以用import *時,包內的__all__機制來除去全域變數
- 函數名盡量都用小寫且單詞間以_(底線)串連,比如說:function_name(arg1, arg2, *args, **kwargs)
- 函數和方法參數,self作為執行個體方法的第一個參數,cls作為類方法的第一個參數,倘若參數名與關鍵字相同,為了避諱,則應該加個底線
- 方法名&類執行個體的屬性方法名規則與函數名相同,類執行個體私人屬性和類執行個體的私人方法以單個底線開頭_private_fuc_name(self)
- 常量全大寫,多個單詞的話以底線間隔: TOTAL 或 CONSTANT_VAR
- 物件導向設計建議:
編碼建議:
- 無論是在哪種Python(Cython,Jython,IconPython,PyPy等),保持一致的格式。比如說,要聯合兩個字串,a = a + b, a += b,都不如用’’.join()好。
- None前面別用==,而應該用is或者is not.
- 用is not,而不是not is
正確: ifa is not None:
錯誤: if a not isNone:
- 一旦涉及到__eq__ , __ne__ , __lt__ , __le__ , __gt__ , __ge__比較操作,最好6個全部實現,而不是只實現其中部分,而依賴其他函數.
- 別用匿名函數來賦值給某個變數,而應該用def函數.
正確: deff(x): return x*2
錯誤: f = lambda x: x*2
- 派生異常繼承自Exception,而不是BaseException.