单下划线和双下划线
這些都是在編譯器中的規則,如果在終端中執行這些命令,必須退出終端,重新進來一次,否則終端將更新不了程序的改動。
__foo__: 定義的是特殊方法,一般是系統定義名字 ,類似 __init__() 之類的。
_foo: 以單下劃線開頭的表示的是 protected 類型的變量,即保護類型只能允許其本身與子類進行訪問,不能用于 from module import *
__foo: 雙下劃線的表示的是私有類型(private)的變量, 只能是允許這個類本身進行訪問了。
(1)、以單下劃線開頭,表示這是一個保護成員,只有類對象和子類對象自己能訪問到這些變量。以單下劃線開頭的變量和函數被默認當作是內部函數,使用from module improt *時不會被獲取,但是使用import module可以獲取
(2)、以單下劃線結尾僅僅是為了區別該名稱與關鍵詞
(3)、雙下劃線開頭,表示為私有成員,只允許類本身訪問,子類也不行。在文本上被替換為_class__method
(4)、雙下劃線開頭,雙下劃線結尾。一種約定,Python內部的名字,用來區別其他用戶自定義的命名,以防沖突。是一些 Python 的“魔術”對象,表示這是一個特殊成員,例如:定義類的時候,若是添加__init__方法,那么在創建類的實例的時候,實例會自動調用這個方法,一般用來對實例的屬性進行初使化,Python不建議將自己命名的方法寫為這種形式,雙下劃線的函數,當使用這個類時候,會對所有的對象作用雙下劃線的方法,如果提前定義了該對象輸出的格式等,則可以使用雙下劃線的,默認對象輸出的為自己指定的格式。而且以雙下劃線命名的函數如果python中有自己的函數,(例如定義:__add__),那么調用這個類class時,自己定義的雙下劃線的函數(自己定義的__add__)將代替python中原來有的'+',造成計算混亂。
 鏈接:https://www.zhihu.com/question/19754941/answer/12860775
 ?
首先是單下劃線開頭,這個被常用于模塊中,在一個模塊中以單下劃線開頭的變量和函數被默認當作內部函數,如果使用 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 包裝。
 鏈接:https://www.zhihu.com/question/19754941/answer/336260809
https://www.zhihu.com/question/19754941
?
總結
 
                            
                        - 上一篇: YOLOv6: A Single-Sta
- 下一篇: 网页动态背景——随鼠标变换的动态线条(鼠
