當前位置:首頁 » 編程語言 » python雙下劃線

python雙下劃線

發布時間: 2024-04-15 13:19:24

1. python魔法函數(特殊函數)

Python中如何實現運算符的重載,即實現例如a+b這樣的運算符操作呢?

在C++中可以使用 operator 關鍵字實現運算符的重載。但是在Python中沒有類似這樣的關鍵字,所以要實現運算符的重載,就要用到Python的魔法函數。Python魔法函數是以雙下劃線開頭,雙下劃線結尾的一組函數。我們在類定義中最常用到的 __init__ 函數就是這樣一個魔法函數,它在創建類對象時被自動調用。

下面我們來看個簡單的例子。

上述代碼示例了幾個魔法函數的用法。 __add__ 函數對應了二元運算符+,當執行a+b語句時,python就會自動調用a. add (b)。 對於上述例子中的v1+v2+v3,則相當於調用了(v1. add(v2)). add(v3)。

代碼中還有一個在Python類定義經常使用的 __str__ 函數,當使用 str() 時會被調用。print函數對傳入的參數都調用了str()將其轉換成易讀的字元串形式,便於列印輸出,因而會調用類定義的__str__函數打出自定義的字元串。

代碼中還有一個特殊的 __call__ 函數,該函數在將對象採用函數調用方式使用時被調用, 例如v1()相當於v1. call ()。

以上就是魔法函數的基本使用方法。常見的魔法函數我們可以使用 dir() 函數來查看。

輸出結果為:

上述結果中形式為『__函數名__』的函數為魔法函數,注意有些對象也是這種形式,例如__class__, __mole__等, 這些不是魔法函數。具體的魔法函數說明可以參考Python官方說明文檔。

以上代碼在Python3.6運行通過.

2. python中下劃線命名的含義

python中有五種下劃線命名;
(1)單前導下劃線: var
以單個下劃線開頭的變數或方法僅供內部使用,但是不強制執行。通過類名.變數名依然可以引用,但是在使用通配符導入模塊(from 模塊 import *)時,不能調用使用下劃線定義的函數,而常規導入(import 模塊)是可以調用的。
(2)單末尾下劃線:var
當最符合當前函數的變數名被佔用,則可以使用_來解決命名沖突。單個末尾下劃線(後綴)是一個約定,用來避免與Python關鍵字產生命名沖突。
(3)雙前導下劃線:_ var
雙下劃線前綴會導致Python解釋器重寫屬性名稱,以避免子類中的命名沖突。
這也叫做名稱修飾(name mangling) - 解釋器更改變數的名稱,以便在類被擴展的時候不容易產生沖突。
(4)雙前導和末尾下劃線: var
Python保留了有雙前導和雙末尾下劃線的名稱,用於特殊用途。 這樣的例子有, init 對象構造函數,或 call --- 它使得一個對象可以被調用。最好避免在自己的程序中使用以雙下劃線(「nders」)開頭和結尾的名稱,以避免與將來Python語言的變化產生沖突。
(5)單下劃線:
有時候單個獨立下劃線是用作一個名字,來表示某個變數是臨時的或無關緊要的。單個下劃線僅僅是一個有效的變數名稱,會有這個用途而已。
總結:

參考: Python中下劃線的5種含義

3. python雙下劃線怎麼打

shift+_兩次,不同編輯器可能顯示會不太一樣。像圖1中那樣沒連起來也是對的,沒有語法錯誤。

4. python涓鐨刜doc_鏄浠涔堟剰鎬濓紵

鎮ㄥソ錛岄栧厛鎮ㄦ弿榪版湁璇錛屽簲璇ユ槸__doc__錛屽弻涓嬪垝綰褲

姣忎釜瀵硅薄閮戒細鏈変竴涓猒_doc__灞炴э紝鐢ㄤ簬鎻忚堪璇ュ硅薄鐨勪綔鐢ㄣ傚湪涓涓妯″潡琚玦mport鏃訛紝鍏舵枃浠朵腑鐨勬煇浜涚壒孌婄殑瀛楃︿覆浼氳玴ython瑙i噴鍣ㄤ繚瀛樺湪鐩稿簲瀵硅薄鐨刜_doc__灞炴т腑銆傛瘮濡傦紝涓涓妯″潡鏈夋ā鍧楃殑__doc__錛屼竴涓猚lass鎴杅unction涔熸湁鍏跺瑰簲鐨刜_doc__灞炴с傚湪python涓錛屼竴涓妯″潡鍏跺疄灝辨槸涓涓.py鏂囦歡銆傚湪鏂囦歡涓鐗規畩鐨勫湴鏂逛功鍐欑殑瀛楃︿覆灝辨槸鎵璋撶殑docstrings錛屽氨鏄灝嗚鏀懼埌__doc__鐨勫唴瀹廣傝繖涓鈥滅壒孌婄殑鍦版柟鈥濆寘鎷錛

1.涓涓鏂囦歡浠諱綍涓鏉″彲鎵ц岀殑浠g爜涔嬪墠 #妯″潡鐨刜_doc__

2.涓涓綾伙紝鍦ㄧ被瀹氫箟璇鍙ュ悗錛屼換浣曞彲鎵ц屼唬鐮佸墠#綾葷殑__doc__

3.涓涓鍑芥暟錛屽湪鍑芥暟瀹氫箟璇鍙ュ悗錛屼換浣曞彲鎵ц屼唬鐮佸墠#鍑芥暟鐨刜_doc__

涓句釜渚嬪瓙錛

#use__doc__灞炴
classMyClass:
'string.'
defprintSay():
'printsaywelcometoyou.'
print'saywelcometoyou.'
printMyClass.__doc__
printMyClass.printSay.__doc__

#杈撳嚭緇撴灉
string.
printsaywelcometoyou.

5. python語法

python語法如下:

1、Python標識符

在Python里,標識符有字母、數字、下劃線組成。

在Python中,所有標識符可以包括英文、數字以及下劃線(_),但不能以數字開頭。

Python中的標識符是區分大小寫的。

以下劃線開頭的標識符是有特殊意義的。以單下劃線開頭_foo的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用from xxx import而導入。

以雙下劃線開頭的foo代表類的私有成員;以雙下劃線開頭和結尾的foo代表Python里特殊方法專用的標識,如init__()代表類的構造函數。

2、Python有五個標準的數據類型

Numbers(數字)String(字元串)List(列表)Tuple(元組)Dictionary(字典)。

Python支持四種不同的數字類型:int(有符號整型)long(長整型[也可以代表八進制和十六進制])float(浮點型)complex(復數)。

python的字串列表有2種取值順序:從左到右索引默認0開始的,最大范圍是字元串長度少1;從右到左索引默認-1開始的,最大范圍是字元串開頭;List(列表)是Python中使用最頻繁的數據類型。

列表可以完成大多數集合類的數據結構實現。它支持字元,數字,字元串甚至可以包含列表(即嵌套)。列表用[]標識,是python最通用的復合數據類型。

列表中值的切割也可以用到變數[頭下標:尾下標],就可以截取相應的列表,從左到右索引默認0開始,從右到左索引默認-1開始,下標可以為空表示取到頭或尾。加號+是列表連接運算符,星號*是重復操作。元組是另一個數據類型,類似於List(列表)。

元組用「()」標識。內部元素用逗號隔開。但是元組不能二次賦值,相當於只讀列表。
字典(dictionary)是除列表以外python之中最靈活的內置數據結構類型。

列表是有序的對象結合,字典是無序的對象集合。兩者之間的區別在於:字典當中的元素是通過鍵來存取的,而不是通過偏移存取。字典用「{}」標識。字典由索引(key)和它對應的值value組成。

6. python 變數下劃線命名規則

單下劃線和雙下劃線在Python變數、類、模塊命名中都有不懂的含義,名稱中都各有其含義。有一些是程序員之間約定俗成的,Python解釋器不用強制其執行,但有些Python解釋器會強制執行。

本文從以下幾種不同使用方式,對下劃線的用途和含義進行說明:

1)變數
通常用於類內部變數的命名,表明該變數是該類私用變數,外部不要去訪問它,但也是可以訪問到的。這只是程序員之間的一個約定俗成的做法,Python解釋器本身不會對它進行限制。
我們創建一個類:

實例化A,並訪問它的變數,aa._bar 也是可以訪問的,但既然人家這么命名了,外部最好不要去訪問了

2)函數和模塊
和變數一樣,這是一個私有函數,不建議外部程序調用該函數。
我們創建一個腳本aa.py, 裡面有2個函數 _aa,bb:

導入aa,分別調用函數 _aa和bb,bb 可以調用,但顯示無 _aa

3)類
同變數和函數一樣,都是私有變數,外部最好不要調用

用來避免和Python內置函數命名產生沖突,PEP8解釋了這個約定。
如class或def不能用作Python中的變數名稱,如果之間用,會提示錯誤。如果你非要用它,可以 使用 class_或 def_。
還有一些函數名,如chr,chr()是Python內置函數,用來表示ascii碼對應的字元他的輸入時數字,可以用十進制,也可以用十六進制。如果你非要它來表示染色體,可以用chr_來代替。當然如果你直接使用它作為變數名,它也不會報錯,但最好不要這樣使用。

在python中定義私有變數只需要在變數名或函數名前加上 "__" (兩個下劃線),那麼這個函數或變數就會成為私有的了。

在內部,python使用一種 name mangling 技術,將__var 替換成 _classname__var,因此在外部調用__var會找不到,代替它的是_classname_var。這種處理方式叫做名稱修飾(name mangling):解釋器更改變數的名稱,以便在類被擴展的時候不容易產生沖突。

由雙下劃線前綴和後綴包圍的變數,不會應用名稱修飾,因此不會被Python解釋器修改:
我們創建一個類B,dir() 查看類的所有屬性,發現 存在 __aa__

但是,Python保留了有雙前導和雙末尾下劃線的名稱,用於特殊用途。 如,__init__對象構造函數,或 __call__ 它使得一個對象可以被調用。所有我們盡量不要使用這種方式命名變數,以免和Python解釋器內置的函數發生沖突。

_ 不加任何其他字元,單獨作為一個名字,用來表示某個臨時的或者無關緊要的變數。

舉例1: 表示一個臨時變數 。在下面的循環中,我們不需要獲取循環的索引,只是print n 行 'Hello World',可以用 "_" 來表示它只是一個臨時值:

舉例2: 表示一個不關心的變數 ,僅僅是個佔位符變數,用來佔位。mlist 列表中,我只想獲得1,2,4 位的變數,那 3 和 5 可以 用 _ 來佔位

舉例3 : 表示由解釋器評估的最近一個表達式的結果 ,方便進行查看。

7. python下劃線定義屬性

類的私有變數和私有方法

在Python中可以通過在屬性變數名前加上雙下劃線定義屬性為私有屬性

特殊變數命名

1、 _xx 以單下劃線開頭的表示的是protected類型的變數。即保護類型只能允許其本身與子類進行訪問。若內部變數標示,如: 當使用「from M import」時,不會將以一個下劃線開頭的對象引入 。

2、 __xx 雙下劃線的表示的是私有類型的變數。只能允許這個類本身進行訪問了,連子類也不可以用於命名一個類屬性(類變數),調用時名字被改變(在類FooBar內部,__boo變成_FooBar__boo,如self._FooBar__boo)

3、 __xx__定義的是特列方法。用戶控制的命名空間內的變數或是屬性,如init , __import__或是file 。只有當文檔有說明時使用,不要自己定義這類變數。 (就是說這些是python內部定義的變數名)

在這里強調說一下私有變數,python默認的成員函數和成員變數都是公開的,沒有像其他類似語言的public,private等關鍵字修飾.但是可以在變數前面加上兩個下劃線"_",這樣的話函數或變數就變成私有的.這是python的私有變數軋壓(這個翻譯好拗口),英文是(private name mangling.) **情況就是當變數被標記為私有後,在變數的前端插入類名,再類名前添加一個下劃線"_",即形成了_ClassName__變數名.**

Python內置類屬性

__dict__ : 類的屬性(包含一個字典,由類的數據屬性組成)

__doc__ :類的文檔字元串

__mole__: 類定義所在的模塊(類的全名是'__main__.className',如果類位於一個導入模塊mymod中,那麼className.__mole__ 等於 mymod)

__bases__ : 類的所有父類構成元素(包含了一個由所有父類組成的元組)

熱點內容
內部存儲空間怎麼清除 發布:2024-05-21 04:04:55 瀏覽:497
bilibili不能緩存 發布:2024-05-21 03:31:14 瀏覽:617
解壓剃發 發布:2024-05-21 03:16:27 瀏覽:641
伺服器怎麼連接到電腦顯示屏上 發布:2024-05-21 02:38:21 瀏覽:286
織夢安裝資料庫連接失敗 發布:2024-05-21 02:37:45 瀏覽:259
python編程入門經典pdf 發布:2024-05-21 02:31:45 瀏覽:7
arm編譯添加驅動 發布:2024-05-21 02:02:28 瀏覽:476
安卓設置頁面是怎麼 發布:2024-05-21 01:32:51 瀏覽:521
學生成績管理系統資料庫設計 發布:2024-05-21 01:14:41 瀏覽:43
我的世界什麼指令直接出現伺服器 發布:2024-05-21 01:10:00 瀏覽:397