書寫規範 PEP8

參考:https://blog.csdn.net/ratsniper/article/details/78954852#function-and-method-arguments-函數和方法參數

不要爲了遵守PEP約定而破壞兼容性!

幾個很好的理由去忽略特定的規則:

  1. 當遵循這份指南之後代碼的可讀性變差,甚至是遵循PEP規範的人也覺得可讀性差。
  2. 與周圍的代碼保持一致(也可能出於歷史原因),儘管這也是清理他人混亂(真正的Xtreme Programming風格)的一個機會。
  3. 有問題的代碼出現在發現編碼規範之前,而且也沒有充足的理由去修改他們。
  4. 當代碼需要兼容不支持編碼規範建議的老版本Python。

Indentation 縮進

每一級縮進使用4個空格

# 與左括號對齊
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

在二元運算符之前換行

# 推薦:運算符和操作數很容易進行匹配
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

Imports 導入

推薦: import os
     import sys

不推薦:  import sys, os

導入總是位於文件的頂部,在模塊註釋和文檔字符串之後,在模塊的全局變量與常量之前。 
導入應該按照以下順序分組:

  1. 標準庫導入
  2. 相關第三方庫導入
  3. 本地應用/庫特定導入 
    你應該在每一組導入之間加入空行。

Comments 註釋

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

Block Comments 塊註釋

塊註釋的每一行開頭使用一個#和一個空格(除非塊註釋內部縮進文本)。 

Inline Comments 行內註釋

行內註釋和代碼至少要有兩個空格分隔。註釋由#和一個空格開始。

命名風格

以下是常見的命名方式:

  • b(單個小寫字母)
  • B(單個大寫字母)
  • lowercase 小寫字母
  • lower_case_with_underscores 使用下劃線分隔的小寫字母
  • UPPERCASE 大寫字母
  • UPPER_CASE_WITH_UNDERSCORES 使用下劃線分隔的大寫字母
  • CapitalizedWords(或者叫 CapWords,或者叫CamelCase 駝峯命名法 —— 這麼命名是因爲字母看上去有起伏的外觀5)。有時候也被稱爲StudlyCaps。 
    注意:當在首字母大寫的風格中用到縮寫時,所有縮寫的字母用大寫,因此,HTTPServerError 比 HttpServerError 好。
  • mixedCase(不同於首字母大寫,第一個單詞的首字母小寫)
  • Capitalized_Words_With_Underscores(巨醜無比!)

Class Names 類名

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

Function Names 函數名

函數名應該小寫,如果想提高可讀性可以用下劃線分隔。 
大小寫混合僅在爲了兼容原來主要以大小寫混合風格的情況下使用(比如 threading.py),保持向後兼容性。

異常

如果你想捕獲所有指示程序出錯的異常,使用 except Exception: (只有except:等價於 except BaseException:)。

以下兩種情況不應該只使用‘excpet’塊:

  1. 如果異常處理的代碼會打印或者記錄log;至少讓用戶知道發生了一個錯誤。
  2. 如果代碼需要做清理工作,使用 raise..try…finally 能很好處理這種情況並且能讓異常繼續上浮。

Programming Recommendations 編程建議

返回的語句保持一致。函數中的返回語句都應該返回一個表達式,或者都不返回。如果一個返回語句需要返回一個表達式,那麼在沒有值可以返回的情況下,需要用 return None 顯式指明,並且在函數的最後顯式指定一條返回語句(如果能跑到那的話)。 

推薦:

 

def foo(x):
    if x >= 0:
        return math.sqrt(x)
    else:
        return None

def bar(x):
    if x < 0:
        return None
    return math.sqrt(x)

不推薦:

def foo(x):
    if x >= 0:
        return math.sqrt(x)

def bar(x):
    if x < 0:
        return
    return math.sqrt(x)

不要用 == 去和True或者False比較:

正確: if greeting:
糟糕: if greeting == True:
更糟: if greeting is True:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章