Python的代碼風格由PEP 8描述,這個文檔描述了Python編程風格的方方面面。在遵守這個文檔的條件下,不同程序員編寫的Python代碼可以保持最大程度的相似風格。這樣就易于閱讀,易于在成員之間交流。
通常情況下,單下劃線_會在以下3種場景中使用:
1.1 在解釋器中,
這種情況下,‘_’代表交互式解釋器會話中上一條執行的語句的結果。這種用法首先被標準CPython解釋器采用,然后其他類型的解釋器也先后采用。
1.2 作為一個名稱,
‘’ 作為臨時性的名稱使用。這樣,當其他人閱讀你的代碼時將會知道,你分配了一個特定的名稱,但是并不會在后面再次用到該名稱。例如,下面的例子中,你可能對循環計數的實際值并不感興趣,此時就可以使用''。
1.3 國際化,
也許你曾看到'_'會被作為一個函數來使用。這種情況下,它通常用于實現國際化和本地化字符串之間翻譯查找的函數名稱,這似乎源自并遵循相應的C約定。
1. 變量
1.1 _xxx
單下劃線開頭的變量,表明這是一個受保護(protected)的變量,原則上不允許直接訪問,但是外部類還是可以訪問到這個變量。因為這只是一個程序員之間的約定,用于警告說明這是一個受保護的變量,外部類不要去訪問它。
以單下劃線'_'為前綴的名稱,如_xxx,應該被視為API中非公開的部分(不管是函數,方法還是數據成員)。此時,應該將它們看做一種實現細節,在修改他們時無需對外部通知。
正如上面所說,這確實類似一種慣例,因為它對解釋器來說確實有一定的意義,如果你寫了代碼‘from <模塊/包名> import *’
,那么以'_'開頭的名稱都不會被導入,除非模塊或包中的'__all__'列表顯示地包含了它們。不過值得注意的是,如果使用import a_module
這樣導入模塊,仍然可以用a_module._some_var
這樣的形式訪問到這樣的對象。
1.2 __xxx
雙下劃線開頭的,表示的是私有類型(private)的變量,只能允許這個類本身進行訪問,甚至它的子類也不可以,用于命名一個類屬性(類變量),調用時名字會被改變(在類Student內部,__name
會變成_student__name
,如self._Student__name
)。雙下劃線開頭的實例變量是不是一定不能從外部訪問呢?其實也不是,仍然可以通過_Student__name
來訪問__name
變量:
1.3 __xxx__
以雙下劃線開頭,并且以雙下劃線結尾的,是內置變量,內置變量是可以直接訪問的,如__init__,__import__或是__file__
。所以,不要自己定義這類變量。
1.4 xxx_
單下劃線結尾的變量一般只是為了避免與Python關鍵字的命名沖突。
1.5
USER_CONSTANT,大寫加下劃線,對于不會發生改變的全局變量,使用大寫加下劃線。
2. 函數和方法
總體而言應該使用,小寫和下劃線。但有些比較老的庫使用的是混合大小寫,即首單詞小寫,之后每個單詞第一個字母大寫,其余小寫。但現在,小寫和下劃線已經成為規范。
2.1 受保護方法:小寫和一個前導下劃線,
這里和受保護變量一樣,并不是真正的受保護權限。同時也應該注意一般函數不要使用兩個前導下劃線(當遇到兩個前導下劃線時,Python的名稱改編特性將發揮作用)。特殊函數后面會提及。
2.2 特殊方法:小寫和兩個前導下劃線,兩個后置下劃線。
這種風格只應用于特殊函數,比如操作符重載等。對Python系統來說,這將確保不會與用戶自定義的名稱沖突。通常,你將會覆寫這些方法,并在里面實現你所需要的功能,以便Python調用它們。例如,當定義一個類時,你經常會覆寫'init'方法。
2.3 函數參數:小寫和下劃線,缺省值等號兩邊無空格。
從測試結果看,即使有空格也無任何影響,所以傾向這是一個約定。
3. 類
類總是使用駝峰式命名,即所有單詞首字母大寫其余字母小寫。類名應該簡寫,精確,并足以從中理解類所完成的工作。
4. 模塊和包
除了特殊模塊init之外,模塊名稱都是用不帶下劃線的小寫字母。若是實現了一個協議,那么通常使用lib作為后綴。例如,
import smtplib
import os
轉載: