python函數(shù)名下劃線(xiàn),python中下劃線(xiàn)的用法

Python中下劃線(xiàn)是什么意思

1、用在Python解釋器,表示上一次的執(zhí)行結(jié)果

10年積累的做網(wǎng)站、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有市中免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

即使不把Python用于編程,也可以把它用作智能計(jì)算器,下劃線(xiàn)保存上次的計(jì)算結(jié)果,在計(jì)算時(shí)相當(dāng)方便:

4 + 3

7

_

7

_ + 2

9

a = 10

_

9

2、代碼中一個(gè)獨(dú)立的下劃線(xiàn),表示這個(gè)變量不重要

一個(gè)獨(dú)立的下劃線(xiàn),它也是一個(gè)變量名,只不過(guò)它比較特殊,當(dāng)你使用下劃線(xiàn)作為變量名時(shí),就代表你告訴大家,這個(gè)變量不重要,僅僅占個(gè)位置,可以忽略,后面不會(huì)再使用它。

當(dāng)然了,這只是一種約定俗成,你要是不遵守也是可以的,畢竟在后面你還可以通過(guò)下劃線(xiàn)來(lái)獲取這個(gè)變量的值。

for i, _ in [(1. 2), (3. 4)]:

print(i)

上面的代碼表示我們只需要列表內(nèi)部元組的第一個(gè),第二個(gè)其實(shí)賦值給了下劃線(xiàn),雖然后面你可以通過(guò)下滑線(xiàn)來(lái)取到值,但是強(qiáng)烈建議你不要這么做,這違反了約定。

3、雙下劃線(xiàn)開(kāi)頭和結(jié)尾的方法,是魔術(shù)方法

比如常見(jiàn)的"__int__"、"__dict__"、"__dir__"、"__doc__"、"__eq__"等等。

4、作為變量名中間的一部分

相比駝峰命名,這叫做蛇形命名,比如user_name。

5、作為數(shù)字中間的一部分,更易讀

10_000_000

10000000

1_280_500_000 == 1280500000

True

python下劃線(xiàn)定義屬性

類(lèi)的私有變量和私有方法

在Python中可以通過(guò)在屬性變量名前加上雙下劃線(xiàn)定義屬性為私有屬性

特殊變量命名

1、 _xx 以單下劃線(xiàn)開(kāi)頭的表示的是protected類(lèi)型的變量。即保護(hù)類(lèi)型只能允許其本身與子類(lèi)進(jìn)行訪問(wèn)。若內(nèi)部變量標(biāo)示,如: 當(dāng)使用“from M import”時(shí),不會(huì)將以一個(gè)下劃線(xiàn)開(kāi)頭的對(duì)象引入 。

2、 __xx 雙下劃線(xiàn)的表示的是私有類(lèi)型的變量。只能允許這個(gè)類(lèi)本身進(jìn)行訪問(wèn)了,連子類(lèi)也不可以用于命名一個(gè)類(lèi)屬性(類(lèi)變量),調(diào)用時(shí)名字被改變(在類(lèi)FooBar內(nèi)部,__boo變成_FooBar__boo,如self._FooBar__boo)

3、 __xx__定義的是特列方法。用戶(hù)控制的命名空間內(nèi)的變量或是屬性,如init , __import__或是file 。只有當(dāng)文檔有說(shuō)明時(shí)使用,不要自己定義這類(lèi)變量。 (就是說(shuō)這些是python內(nèi)部定義的變量名)

在這里強(qiáng)調(diào)說(shuō)一下私有變量,python默認(rèn)的成員函數(shù)和成員變量都是公開(kāi)的,沒(méi)有像其他類(lèi)似語(yǔ)言的public,private等關(guān)鍵字修飾.但是可以在變量前面加上兩個(gè)下劃線(xiàn)"_",這樣的話(huà)函數(shù)或變量就變成私有的.這是python的私有變量軋壓(這個(gè)翻譯好拗口),英文是(private name mangling.) **情況就是當(dāng)變量被標(biāo)記為私有后,在變量的前端插入類(lèi)名,再類(lèi)名前添加一個(gè)下劃線(xiàn)"_",即形成了_ClassName__變量名.**

Python內(nèi)置類(lèi)屬性

__dict__ : 類(lèi)的屬性(包含一個(gè)字典,由類(lèi)的數(shù)據(jù)屬性組成)

__doc__ :類(lèi)的文檔字符串

__module__: 類(lèi)定義所在的模塊(類(lèi)的全名是'__main__.className',如果類(lèi)位于一個(gè)導(dǎo)入模塊mymod中,那么className.__module__ 等于 mymod)

__bases__ : 類(lèi)的所有父類(lèi)構(gòu)成元素(包含了一個(gè)由所有父類(lèi)組成的元組)

python 變量下劃線(xiàn)命名規(guī)則

單下劃線(xiàn)和雙下劃線(xiàn)在Python變量、類(lèi)、模塊命名中都有不懂的含義,名稱(chēng)中都各有其含義。有一些是程序員之間約定俗成的,Python解釋器不用強(qiáng)制其執(zhí)行,但有些Python解釋器會(huì)強(qiáng)制執(zhí)行。

本文從以下幾種不同使用方式,對(duì)下劃線(xiàn)的用途和含義進(jìn)行說(shuō)明:

1)變量

通常用于類(lèi)內(nèi)部變量的命名,表明該變量是該類(lèi)私用變量,外部不要去訪問(wèn)它,但也是可以訪問(wèn)到的。這只是程序員之間的一個(gè)約定俗成的做法,Python解釋器本身不會(huì)對(duì)它進(jìn)行限制。

我們創(chuàng)建一個(gè)類(lèi):

實(shí)例化A,并訪問(wèn)它的變量,aa._bar 也是可以訪問(wèn)的,但既然人家這么命名了,外部最好不要去訪問(wèn)了

2)函數(shù)和模塊

和變量一樣,這是一個(gè)私有函數(shù),不建議外部程序調(diào)用該函數(shù)。

我們創(chuàng)建一個(gè)腳本aa.py, 里面有2個(gè)函數(shù) _aa,bb:

導(dǎo)入aa,分別調(diào)用函數(shù) _aa和bb,bb 可以調(diào)用,但顯示無(wú) _aa

3)類(lèi)

同變量和函數(shù)一樣,都是私有變量,外部最好不要調(diào)用

用來(lái)避免和Python內(nèi)置函數(shù)命名產(chǎn)生沖突,PEP8解釋了這個(gè)約定。

如class或def不能用作Python中的變量名稱(chēng),如果之間用,會(huì)提示錯(cuò)誤。如果你非要用它,可以 使用 class_或 def_。

還有一些函數(shù)名,如chr,chr()是Python內(nèi)置函數(shù),用來(lái)表示ascii碼對(duì)應(yīng)的字符他的輸入時(shí)數(shù)字,可以用十進(jìn)制,也可以用十六進(jìn)制。如果你非要它來(lái)表示染色體,可以用chr_來(lái)代替。當(dāng)然如果你直接使用它作為變量名,它也不會(huì)報(bào)錯(cuò),但最好不要這樣使用。

在python中定義私有變量只需要在變量名或函數(shù)名前加上 "__" (兩個(gè)下劃線(xiàn)),那么這個(gè)函數(shù)或變量就會(huì)成為私有的了。

在內(nèi)部,python使用一種 name mangling 技術(shù),將__var 替換成 _classname__var,因此在外部調(diào)用__var會(huì)找不到,代替它的是_classname_var。這種處理方式叫做名稱(chēng)修飾(name mangling):解釋器更改變量的名稱(chēng),以便在類(lèi)被擴(kuò)展的時(shí)候不容易產(chǎn)生沖突。

由雙下劃線(xiàn)前綴和后綴包圍的變量,不會(huì)應(yīng)用名稱(chēng)修飾,因此不會(huì)被Python解釋器修改:

我們創(chuàng)建一個(gè)類(lèi)B,dir() 查看類(lèi)的所有屬性,發(fā)現(xiàn) 存在 __aa__

但是,Python保留了有雙前導(dǎo)和雙末尾下劃線(xiàn)的名稱(chēng),用于特殊用途。 如,__init__對(duì)象構(gòu)造函數(shù),或 __call__ 它使得一個(gè)對(duì)象可以被調(diào)用。所有我們盡量不要使用這種方式命名變量,以免和Python解釋器內(nèi)置的函數(shù)發(fā)生沖突。

_ 不加任何其他字符,單獨(dú)作為一個(gè)名字,用來(lái)表示某個(gè)臨時(shí)的或者無(wú)關(guān)緊要的變量。

舉例1: 表示一個(gè)臨時(shí)變量 。在下面的循環(huán)中,我們不需要獲取循環(huán)的索引,只是print n 行 'Hello World',可以用 "_" 來(lái)表示它只是一個(gè)臨時(shí)值:

舉例2: 表示一個(gè)不關(guān)心的變量 ,僅僅是個(gè)占位符變量,用來(lái)占位。mlist 列表中,我只想獲得1,2,4 位的變量,那 3 和 5 可以 用 _ 來(lái)占位

舉例3 : 表示由解釋器評(píng)估的最近一個(gè)表達(dá)式的結(jié)果 ,方便進(jìn)行查看。

分享題目:python函數(shù)名下劃線(xiàn),python中下劃線(xiàn)的用法
文章URL:http://muchs.cn/article6/phgdog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶(hù)體驗(yàn)網(wǎng)站營(yíng)銷(xiāo)網(wǎng)站建設(shè)、服務(wù)器托管、App開(kāi)發(fā)域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)