回覆列表
  • 1 # 使用者3296806220335

    首先是單下劃線開頭,這個被常用於模組中,在一個模組中以單下劃線開頭的變數和函式被預設當作內部函式,如果使用 from a_module

    import * 匯入時,這部分變數和函式不會被匯入。不過值得注意的是,如果使用 import a_module 這樣匯入模組,仍然可以用

    a_module._some_var 這樣的形式訪問到這樣的物件。

    在 Python

    的官方推薦的程式碼樣式中,還有一種單下劃線結尾的樣式,這在解析時並沒有特別的含義,但通常用於和 Python

    關鍵詞區分開來,比如如果我們需要一個變數叫做 class,但 class 是 Python 的關鍵詞,就可以以單下劃線結尾寫作 class_。

    下劃線開頭的命名形式在 Python 的類成員中使用表示名字改編 (Name Mangling),即如果有一 Test 類裡有一成員

    __x,那麼 dir(Test) 時會看到 _Test__x 而非

    __x。這是為了避免該成員的名稱與子類中的名稱衝突。但要注意這要求該名稱末尾沒有下劃線。

    雙下劃線開頭雙下劃線結尾的是一些

    Python 的“魔術”物件,如類成員的 __init__、__del__、__add__、__getitem__ 等,以及全域性的

    __file__、__name__ 等。 Python 官方推薦永遠不要將這樣的命名方式應用於自己的變數或函式,而是按照文件說明來使用。

    另外單下劃線開頭還有一種一般不會用到的情況在於使用一個 C 編寫的擴充套件庫有時會用下劃線開頭命名,然後使用一個去掉下劃線的 Python 模組進行包裝。如 struct 這個模組實際上是 C 模組 _struct 的一個 Python 包裝。

    更多關於命名的內容可以參考 PEP 8 《程式碼風格指南》的 Name Conventions 一節:http://www.python.org/dev/peps/pep-0008/

    需要說明的是,由於這份文件看起來經過多次修改,雙下劃線開頭的用法似乎曾經如 @makestory 所說,建議為類的私有成員,至少啄木鳥社群的 PEP 8 譯文是這樣寫的,但 PEP 8 當前的官方版本中並沒有體現。

  • 中秋節和大豐收的關聯?
  • 兩個人一直曖昧卻又不在一起,是什麼體驗?與異地戀有什麼關係嗎?