Python 中各種下劃線的騷操作:_、_xx、xx_、__xx、__xx__、_classn...
我們在定義一些變量或者方法的時候,常常會用到下劃線,在 Python 中,下劃線可是很有用處的喲,比如變量,有些是一個下劃線開頭的(_xx),有些是兩個下劃線開頭的(__xx),有些是在名稱的結(jié)尾添加下劃線的(xx_),還有一些方法我們常常看到兩個下劃線開頭和結(jié)尾的(__xx__) 等等…
為什么要這么寫呢?它們都代表什么意思?我們以后如何定義好這些名稱呢?那么接下來就是:
學(xué)習(xí) Python 的正確姿勢
1、只有一個下劃線(_)是干嘛的呢?
在 Python 解釋器里面,對單個下劃線是有特殊的 “感情” 的,我來給你舉個例子:

仔細(xì)看你會發(fā)現(xiàn),_ 是有值的,這是因?yàn)樵?Python 解釋器里面, _ 會指向你最后一次執(zhí)行的表達(dá)式。這在我們使用 Python 交互的時候常常會用到。
除此之外,我們還可以使用單個下劃線來格式化變量的值,比如金額:

通過這樣的表現(xiàn),我們能更加易讀, Python 也知道我們在表示什么。
再者,單個下劃線還可以使用在循環(huán)語句中:

2、你常見的?__xx__
這種以兩個下劃線開頭和結(jié)尾的命名方式,我想應(yīng)該是你最常見到的了,比如我們之前說的類的初始化方法:

其實(shí)這些,我們叫它們?yōu)?“魔法函數(shù)” ,也就是說,它是 Python 內(nèi)置好了的,我們可以直接拿來使用。所以你應(yīng)該盡量避免做這樣類似的以兩個下劃線開頭和結(jié)尾的方式去命名。
3、單個下劃線開頭的?_xx
以單個下劃線開頭命名的方法或者變量,就是說明它是僅提供內(nèi)部使用的。
舉一個例子,我們來創(chuàng)建一個模塊(handsomeb.py),然后在里面創(chuàng)建兩個方法,一個以單個下劃線開頭命名,一個不以單個下劃線開頭命名:

接著我們?nèi)ヒ眠@個模塊,分別執(zhí)行模塊中的方法:

當(dāng)我們?nèi)?zhí)行 my_func() 輸出 fxxkpython ,沒毛病吧:

但是當(dāng)我們?nèi)?zhí)行 _my_func() 的時候就不行了:

這時候它告訴我們 _my_func 沒有定義,它只能被模塊內(nèi)部使用。
4、單個下劃線結(jié)尾的?xx_
我們知道, Python 有許多關(guān)鍵詞,比如 def、return、calss、pass 這些,它們都是有特殊的意義的,所以我們在定義變量或者方法的時候,不可以用它們來命名的,比如這樣是錯誤的:

那么如果我們死都要這樣定義名稱呢?為了區(qū)分,在它們的后面添加一個下劃線:

但是小帥b不建議這樣命名,有那么多名稱,何必去定義關(guān)鍵詞相關(guān)的名稱呢。
5、兩個下劃線開頭的命名:?__xx
這種命名的方式更多的是用在類的繼承,通過兩個下劃線開頭命名的成員,可以防止被子類重寫。
我們來寫一個這樣的 Person 類:

可以看到,在 Person 這個類里面,有兩個變量,一個是 name ,一個是 age。不過 age 是以兩個下劃線開頭命名了。
當(dāng)我們?nèi)?shí)例化這個 Person 的時候,發(fā)現(xiàn) name 可以正常訪問,但是 __age 無法訪問了。
我們來打印一下這個對象的屬性:

仔細(xì)看,name 還是 name, 但是 __age 變成了 _Person__age。
所以我們無法重寫原來的 __age:

我們來打印一下這個 Son 類的屬性:

可以發(fā)現(xiàn),son 里面的 __age 實(shí)質(zhì)上已經(jīng)變成了 _Son__age。所以你要得到真正重寫的值可以這樣:

6、一個下劃線+類名+兩個下劃線開頭的命名:?_classname__xx
通過上面第 5 點(diǎn)的解釋,那么還有這么一種命名方式應(yīng)該對你來說就好理解了:

你可以這樣去使用它:

ok,以上就是 Python 中各種下劃線的用法和解釋,希望對你有幫助,如果你看一遍之后有點(diǎn)懵,那就再看幾遍吧。當(dāng)你把別人忽略的東西掌握起來,你就比他們牛逼了。
ps: 如果你對 Python 這些騷操作感興趣,不妨了解一下小帥b的私密干貨:帥帥的 vip?,以上這一篇只是其中的一小篇 “甜點(diǎn)”,那么我們下回見咯,peace!
相關(guān):Python 被低估了的 10 個小技巧
Pycharm 被低估了的 10 個快捷鍵
這幾個 Pycharm 插件能讓你擼代碼擼到高潮
讓我知道
你正在看
評論
圖片
表情
