老生常談 談一談python的那些命名規範

2021-09-16 18:07:09 字數 1960 閱讀 5894

檔名

全小寫,可使用下劃線
應該是簡短的、小寫的名字。如果下劃線可以改善可讀性可以加入。如mypackage。
模組
與包的規範同。如mymodule。
總是使用首字母大寫單詞串。如myclass。內部類可以使用額外的前導下劃線。
函式&方法
函式名應該為小寫,可以用下劃線風格單詞以增加可讀性。如:myfunction,my_example_function。

*注意*:混合大小寫僅被允許用於這種風格已經佔據優勢的時候,以便保持向後相容。

函式和方法的引數
總使用「self」作為例項方法的第乙個引數。總使用「cls」作為類方法的第乙個引數。

如果乙個函式的引數名稱和保留的關鍵字衝突,通常使用乙個字尾下劃線好於使用縮寫或奇怪的拼寫。

全域性變數
對於from m import *匯入語句,如果想阻止匯入模組內的全域性變數可以使用舊有的規範,在全域性變數上加乙個前導的下劃線。

*注意*:應避免使用全域性變數

變數
變數名全部小寫,由下劃線連線各個單詞。如color = white,this_is_a_variable = 1

*注意*:

1.不論是類成員變數還是全域性變數,均不使用 m 或 g 字首。

2.私有類成員使用單一下劃線字首標識,多定義公開成員,少定義私有成員。

3.變數名不應帶有型別資訊,因為python是動態型別語言。如 ivalue、names_list、dict_obj 等都是不好的命名。

常量
常量名所有字母大寫,由下劃線連線各個單詞如max_overflow,total。
異常
以「error」作為字尾。
縮寫
命名應當盡量使用全拼寫的單詞,縮寫的情況有如下兩種:

1.常用的縮寫,如xml、id等,在命名時也應只大寫首字母,如xmlparser。

2.命名中含有長單詞,對某個單詞進行縮寫。這時應使用約定成俗的縮寫方式。

例如:function 縮寫為 fn

text 縮寫為 txt

object 縮寫為 obj

count 縮寫為 cnt

number 縮寫為 num,等。

前導字尾下劃線
乙個前導下劃線:表示非公有。

乙個字尾下劃線:避免關鍵字衝突。

兩個前導下劃線:當命名乙個類屬性引起名稱衝突時使用。

兩個前導和字尾下劃線:「魔」(有特殊用圖)物件或者屬性,例如__init__或者__file__。絕對不要創造這樣的名字,而只是使用它們。

*注意*:關於下劃線的使用存在一些爭議。

特定命名方式
主要是指 __***__ 形式的系統保留字命名法。

專案中也可以使用這種命名,它的意義在於這種形式的變數是唯讀的,這種形式的類成員函式盡量不要過載。如

class base(object):

def __init__(self, id, parent = none):

self.__id__ = id

self.__parent__ = parent

def __message__(self, msgid):

…略
其中 __id__、__parent__ 和 __message__ 都採用了系統保留字命名法。

附:google python命名規範

module_name, package_name, classname, method_name, exceptionname, function_name, global_var_name, instance_var_name, function_parameter_name, local_var_name.

老生常談python函式引數的區別 必看篇

在運用python的過程中,發現當函式引數為list的時候,在函式內部呼叫list.append 會改變形參,與c c 的不太一樣,查閱相關資料,在這裡記錄一下。python中id可以獲取物件的記憶體位址 num1 10 num2 num1 num3 10 id num1 id num2lblees...

做管理軟體的注意了,我再老生常談一下

本來我已經不想寫這些文章了,因為這些文章我已經在過去的十多年裡寫了n多,都是老生常談的問題和答案,但是總有一代一代的人掉坑里,連一點長進也沒有,連一點傳承也沒有。正好今早有人討論這些問題,我也多嘴了幾句,所以把這些多嘴再放上來。一 企業應用軟體分類 我們是做企業應用類軟體的,在我們角度來看,我們把企...

談一談python的字串和輸出

python3的字串預設是unicode格式儲存的,不必在前面加u說明。u 真的 和 真的 是一樣的。為什麼有時候獲取網頁資訊之後,我們輸出結果到螢幕,檢視一些中間變數的時候,會出現告知我們這樣的錯誤 unicodedecodeerror utf 8 codec can t decode bytes...