參考:https://blog.csdn.net/ratsniper/article/details/78954852#function-and-method-arguments-函數和方法參數
不要爲了遵守PEP約定而破壞兼容性!
幾個很好的理由去忽略特定的規則:
- 當遵循這份指南之後代碼的可讀性變差,甚至是遵循PEP規範的人也覺得可讀性差。
- 與周圍的代碼保持一致(也可能出於歷史原因),儘管這也是清理他人混亂(真正的Xtreme Programming風格)的一個機會。
- 有問題的代碼出現在發現編碼規範之前,而且也沒有充足的理由去修改他們。
- 當代碼需要兼容不支持編碼規範建議的老版本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
導入總是位於文件的頂部,在模塊註釋和文檔字符串之後,在模塊的全局變量與常量之前。
導入應該按照以下順序分組:
- 標準庫導入
- 相關第三方庫導入
- 本地應用/庫特定導入
你應該在每一組導入之間加入空行。
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’塊:
- 如果異常處理的代碼會打印或者記錄log;至少讓用戶知道發生了一個錯誤。
-
如果代碼需要做清理工作,使用 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: