1. 程式人生 > >常見的pep8規則

常見的pep8規則

1. 括號中使用垂直隱式縮排或使用懸掛縮排

縮排

每級縮排用4個空格

 2. 空格還是tab ?

  • 空格是首選的縮排方法
  • Tab僅僅在已經使用tab縮排的程式碼中為了保持一致性而使用。
  • Python 3中不允許混合使用Tab和空格縮排。
  • Python 2的包含空格與Tab和空格縮排的應該全部轉為空格縮排
  • Python2命令列直譯器使用-t選項時有非法混合Tab和空格的情況會告警。當使用-tt警告提升為錯誤。強烈推薦這些選項!另外個人推薦pep8和autopep8模組。

3. 最大行寬

  • 限制所有行的最大行寬為79字元。
  • 文字長塊,比如文件字串或註釋,行長度應限制為72個字元。

4. 空行

  • 兩行空行分割頂層函式和類的定義。
  • 類的方法定義用單個空行分割。
  • 額外的空行可以必要的時候用於分割不同的函式組,但是要儘量節約使用。
  • 額外的空行可以必要的時候在函式中用於分割不同的邏輯塊,但是要儘量節約使用。
  • Python接 contol-L作為空白符;許多工具視它為分頁符,這些要因編輯器而異。

5. 原始檔編碼

  • 在核心Python釋出的程式碼應該總是使用UTF-8(ASCII在Python 2)。
  • ASCII檔案(Python 2)或UTF-8(Python 3)不應有編碼宣告。
  • 標準庫中非預設的編碼應僅用於測試或當註釋或文件字串,比如包含非ASCII字元的作者姓名,儘量使用\x , \u , \U , or \N。
  • Python 3.0及以後版本,PEP 3131可供參考,部分內容如下:在Python標準庫必須使用ASCII識別符號,並儘量只使用英文字母。此外字串和註釋也必須用ASCII。唯一的例外是:(a)測試非ASCII的功能,和(b)作者的名字不是拉丁字母。

6. 匯入

  • 匯入在單獨行
  • 匯入始終在檔案的頂部,在模組註釋和文件字串之後,在模組全域性變數和常量之前

    匯入順序如下:標準庫進口,相關的第三方庫,本地庫。各組的匯入之間要有空行。

    相關的all放在匯入之後。

  • 推薦絕對路徑匯入,因為它們通常更可讀,而且往往是表現更好的(或至少提供更好的錯誤訊息)。
  •  匯入類的方法: 
  • 禁止使用萬用字元匯入。

  萬用字元匯入(from <module> import *)應該避免,因為它不清楚名稱空間有哪些名稱存,混淆讀者和許多自動化的工具。唯一的例外是重新發布對外的API時可以考慮使用。 

7. 字串的引用

  • Python中單引號字串和雙引號字串都是相同的。注意儘量避免在字串中的反斜槓以提高可讀性。
  • 根據PEP 257, 三個引號都使用雙引號。

8. 表示式和語句的空格 

  • 括號裡邊避免空格
  • 逗號,冒號,分號之前避免空格
  • 索引操作中的冒號當作操作符處理前後要有同樣的空格(一個空格或者沒有空格,個人建議是沒有

8. 註釋 

  • 與程式碼自相矛盾的註釋比沒註釋更差。修改程式碼時要優先更新註釋!
  • 註釋是完整的句子。如果註釋是斷句,首字母應該大寫,除非它是小寫字母開頭的識別符號(永遠不要修改識別符號的大小寫)。
  • 如果註釋很短,可以省略末尾的句號。註釋塊通常由一個或多個段落組成。段落由完整的句子構成且每個句子應該以點號(後面要有兩個空格)結束,並注意斷詞和空格。
  • 非英語國家的程式設計師請用英語書寫你的註釋,除非你120%確信程式碼永遠不會被不懂你的語言的人閱讀。
  • 註釋塊通常應用在程式碼前,並和這些程式碼有同樣的縮排。每行以 '# '(除非它是註釋內的縮排文字,注意#後面有空格)。註釋塊內的段落用僅包含單個 '#' 的行分割。
  • 慎用行內註釋(Inline Comments) 節儉使用行內註釋。 行內註釋是和語句在同一行,至少用兩個空格和語句分開。行內註釋不是必需的,重複羅嗦會使人分心。不要這樣做:

9. 文件字串 

  • docstring是一個字串文字,作為模組,函式,類或方法定義中的第一個語句出現。這樣的docstring成為該物件的__doc__特殊屬性
  • 所有模組通常應該有文件,所有由模組匯出的函式和類也應該有文件。公共方法(包括__init__建構函式)也應該有docstrings。軟體包可能記錄在軟體包目錄中的__init__.py檔案的模組文件字串中
  • Python程式碼中其他地方出現的字串文字也可以作為文件。它們不被Python位元組碼編譯器識別,並且不能作為執行時物件屬性(即未分配給__doc__)訪問,但可以通過軟體工具提取兩種型別的額外文件字串:
  1. 在模組,類或__init__方法的頂級簡單賦值之後立即出現的字串文字被稱為“屬性文件字串”
  2. 在另一個文件字串之後立即出現的字串文字稱為“其他文件字串”

10. 版本標籤

版本註記 (Version Bookkeeping)

  • 如果你必須在原始檔中包含git、Subversion、CVS或RCS crud資訊,放置在模組的文件字串之後,任何其他程式碼之前,上下各用一個空行:

    __version__ = "$Revision$"# $Source$

11. 命名約定

  • b(單個小寫字母)
  • B(單個大寫字母)
  • lowercase(小寫串)
  • lower_case_with_underscores(帶下劃線的小寫)
  • UPPERCASE(大寫串)
  • UPPER_CASE_WITH_UNDERSCORES(帶下劃線的大寫串)

  注意: 使用大寫縮寫時,縮寫使用大寫字母更好。故 HTTPServerError 比 HttpServerError 更好

  • mixedCase(混合大小寫,第一個單詞是小寫)
  • Capitalized_Words_With_Underscores(帶下劃線,首字母大寫,醜陋)