Python中的單下劃線和雙下劃線使用場(chǎng)景詳解
單下劃線
單下劃線用作變量
最常見的一種使用場(chǎng)景是作為變量占位符,使用場(chǎng)景明顯可以減少代碼中多余變量的使用。為了方便理解,_可以看作被丟棄的變量名稱,這樣做可以讓閱讀你代碼的人知道,這是個(gè)不會(huì)被使用的變量,e.g.。
for _, _, filenames in os.walk(targetDir):
print(filenames)
for _ in range(100):
print('PythonPoint')
在交互解釋器比如iPython中,_變量指向交互解釋器中最后一次執(zhí)行語句的返回結(jié)果。
單下劃線前綴名稱(例如_pythonPoint)
- 這表示這是一個(gè)保護(hù)成員(屬性或者方法),只有類對(duì)象和子類對(duì)象自己能訪問到這些變量,是用來指定私有變量和方法的一種方式(約定而已)。如果使用
from a_module import *導(dǎo)入時(shí),這部分變量和函數(shù)不會(huì)被導(dǎo)入。不過值得注意的是,如果使用import a_module這樣導(dǎo)入模塊,仍然可以用a_module._pythonPoint這樣的形式訪問到這樣的對(duì)象。 - 另外單下劃線開頭還有一種一般不會(huì)用到的情況,例如使用一個(gè)C編寫的擴(kuò)展庫有時(shí)會(huì)用下劃線開頭命名,然后使用一個(gè)去掉下劃線的Python模塊進(jìn)行包裝。如struct這個(gè)模塊實(shí)際上是C模塊
_struct的一個(gè)Python包裝。
單下劃線后綴名稱
通常用于和Python關(guān)鍵詞區(qū)分開來,比如我們需要一個(gè)變量叫做class,但class是Python的關(guān)鍵詞,就可以以單下劃線結(jié)尾寫作class_。
雙下劃線
雙下劃線前綴名稱
這表示這是一個(gè)私有成員(屬性或者方法)。它無法直接像公有成員一樣隨便訪問。雙下劃線開頭的命名形式在Python的類成員中使用表示名字改編,即如果Test類里有一成員__x,那么dir(Test)時(shí)會(huì)看到_Test__x而非__x。這是為了避免該成員的名稱與子類中的名稱沖突,方便父類和子類中該成員的區(qū)分識(shí)別。但要注意這要求該名稱末尾最多有一個(gè)下劃線。e.g.

雙下劃線前綴及后綴名稱
一種約定,Python內(nèi)部的名字,用來區(qū)別其他用戶自定義的命名,以防沖突。是一些Python的“魔術(shù)”對(duì)象,表示這是一個(gè)特殊成員。如類成員的__init__、__del__、__add__等,以及全局的__file__、__name__等。Python官方推薦永遠(yuǎn)不要將這樣的命名方式應(yīng)用于自己的變量或函數(shù),而是按照文檔說明來使用Python內(nèi)置的這些特殊成員。
Python中關(guān)于私有屬性、方法約定問題,官方文檔如下
“Private” instance variables that cannot be accessed except from inside an object don't exist in Python. However, there is a convention that is followed by most Python code: a name prefixed with an underscore (e.g. _spam) should be treated as a non-public part of the API (whether it is a function, a method or a data member). It should be considered an implementation detail and subject to change without notice.Since there is a valid use-case for class-private members (namely to avoid name clashes of names with names defined by subclasses), there is limited support for such a mechanism, called name mangling. Any identifier of the form__spam (at least two leading underscores, at most one trailing underscore) is textually replaced with _classname__spam, where classname is the current class name with leading underscore(s) stripped. This mangling is done without regard to the syntactic position of the identifier, as long as it occurs within the definition of a class.
Name mangling is helpful for letting subclasses override methods without breaking intraclass method calls.
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python機(jī)器學(xué)習(xí)庫xgboost的使用
這篇文章主要介紹了python機(jī)器學(xué)習(xí)庫xgboost的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
python 插入Null值數(shù)據(jù)到Postgresql的操作
這篇文章主要介紹了python 插入Null值數(shù)據(jù)到Postgresql的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Python爬蟲入門有哪些基礎(chǔ)知識(shí)點(diǎn)
在本篇文章中小編給大家整理的是關(guān)于Python爬蟲入門基礎(chǔ)知識(shí)點(diǎn)整理,有興趣的朋友們可以跟著學(xué)習(xí)下。2020-06-06
Python調(diào)用C語言的方法【基于ctypes模塊】
這篇文章主要介紹了Python調(diào)用C語言的方法,涉及Python基于ctypes模塊調(diào)用C語言編譯后的動(dòng)態(tài)鏈接庫文件相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
tensorflow2 自定義損失函數(shù)使用的隱藏坑
本文主要介紹了tensorflow2 自定義損失函數(shù)使用的隱藏坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07
PHP實(shí)現(xiàn)發(fā)送和接收J(rèn)SON請(qǐng)求
本篇文章給大家分享了PHP實(shí)現(xiàn)發(fā)送和接收J(rèn)SON請(qǐng)求的詳細(xì)方法和實(shí)例代碼,有興趣的朋友可以參考學(xué)習(xí)下。2018-06-06
Python中l(wèi)ist查詢及所需時(shí)間計(jì)算操作示例
這篇文章主要介紹了Python中l(wèi)ist查詢及所需時(shí)間計(jì)算操作,涉及Python列表list遍歷、查詢及時(shí)間消耗計(jì)算相關(guān)操作技巧,需要的朋友可以參考下2018-06-06

