Python代碼風格推薦(谷歌、PEP8)


引言

  一直都覺得好的代碼風格就像是好看的電腦桌面,一定要簡潔並且遵循一定的規范,之前寫代碼一直覺得有些隨意,這樣很不好,於是整理了一些實用的規范,以后盡量寫一下好的代碼。

  在Python開發中,也有不同的編程風格規范,和C/C++開發的編程規范一樣,Google的編程規范,詳細細節參見:

    1. 英文:Google Python Style Guide
    2. 中文:Google Python風格指南

  PEP8規范

    1. PEP 8 -- Style Guide for Python Code

    2. PEP8中文翻譯

命名規范

Names to Avoid 應避免的名字

  1. 永遠不要使用字母‘l’(小寫的L),‘O’(大寫的O),或者‘I’(大寫的I)作為單字符變量名。

  2. 在有些字體里,這些字符無法和數字0和1區分,如果想用‘l’,用‘L’代替。

Class Names 類名

  1. 類名一般使用首字母大寫的約定。

  2. 在接口被文檔化並且主要被用於調用的情況下,可以使用函數的命名風格代替。

  3. 注意,對於內置的變量命名有一個單獨的約定:大部分內置變量是單個單詞(或者兩個單詞連接在一起),首字母大寫的命名法只用於異常名或者內部的常量。

Function Names 函數名

  1. 函數名應該小寫,如果想提高可讀性可以用下划線分隔。

  2. 大小寫混合僅在為了兼容原來主要以大小寫混合風格的情況下使用(比如 threading.py),保持向后兼容性。

Function and method arguments 函數和方法參數

  1. 始終要將 self 作為實例方法的的第一個參數。

  2. 始終要將 cls 作為類靜態方法的第一個參數。

  3. 如果函數的參數名和已有的關鍵詞沖突,在最后加單一下划線比縮寫或隨意拼寫更好。因此 class_ 比 clss 更好。(也許最好用同義詞來避免這種沖突)

編程建議

  1. 代碼應該用不損害其他Python實現的方式去編寫(PyPy,Jython,IronPython,Cython,Psyco 等)。 比如,不要依賴於在CPython中高效的內置字符連接語句 a += b 或者 a = a + b。這種優化甚至在CPython中都是脆弱的(它只適用於某些類型)並且沒有出現在不使用引用計數的實現中。在性能要求比較高的庫中,可以種 ”.join() 代替。這可以確保字符關聯在不同的實現中都可以以線性時間發生。

  2. 和像None這樣的單例對象進行比較的時候應該始終用 is 或者 is not,永遠不要用等號運算符。

另外,如果你在寫 if x 的時候,請注意你是否表達的意思是 if x is not None。舉個例子,當測試一個默認值為None的變量或者參數是否被設置為其他值的時候。這個其他值應該是在上下文中能成為bool類型false的值。

  1. 使用 is not 運算符,而不是 not … is 。雖然這兩種表達式在功能上完全相同,但前者更易於閱讀,所以優先考慮。

導入import

  1. 導入通常在分開的行。
  1. 導入總是位於文件的頂部,在模塊注釋和文檔字符串之后,在模塊的全局變量與常量之前。

  2. 導入應該按照以下順序分組:

    • 標准庫導入

    • 相關第三方庫導入

    • 本地應用/庫特定導入

    • 你應該在每一組導入之間加入空行。

  3. 推薦使用絕對路徑導入,如果導入系統沒有正確的配置(比如包里的一個目錄在sys.path里的路徑后),使用絕對路徑會更加可讀並且性能更好(至少能提供更好的錯誤信息)。

注釋

  1. 與代碼相矛盾的注釋比沒有注釋還糟,當代碼更改時,優先更新對應的注釋!

  2. 注釋應該是完整的句子。如果一個注釋是一個短語或句子,它的第一個單詞應該大寫,除非它是以小寫字母開頭的標識符(永遠不要改變標識符的大小寫!)。

  3. 如果注釋很短,結尾的句號可以省略。塊注釋一般由完整句子的一個或多個段落組成,並且每句話結束有個句號。

  4. 在句尾結束的時候應該使用兩個空格。

  5. 當用英文書寫時,遵循Strunk and White (譯注:《Strunk and White, The Elements of Style》)的書寫風格。

  6. 在非英語國家的Python程序員,請使用英文寫注釋,除非你120%的確信你的代碼不會被使用其他語言的人閱讀。

Block Comments 塊注釋

  1. 塊注釋通常適用於跟隨它們的某些(或全部)代碼,並縮進到與代碼相同的級別。塊注釋的每一行開頭使用一個#和一個空格(除非塊注釋內部縮進文本)。

  2. 塊注釋內部的段落通過只有一個#的空行分隔。

Inline Comments 行內注釋

  1.有節制地使用行內注釋。

  2.行內注釋是與代碼語句同行的注釋。行內注釋和代碼至少要有兩個空格分隔。注釋由#和一個空格開始。

  3.事實上,如果狀態明顯的話,行內注釋是不必要的,反而會分散注意力。

Documentation Strings 文檔字符串

  1. 要為所有的公共模塊,函數,類以及方法編寫文檔說明。

  2. 非公共的方法沒有必要,但是應該有一個描述方法具體作用的注釋。這個注釋應該在def那一行之后。

  3. PEP 257描述了寫出好的文檔說明相關的約定。特別需要注意的是,多行文檔說明使用的結尾三引號應該自成一行。

  1. 對於單行的文檔說明,尾部的三引號應該和文檔在同一行。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM