Python中單下劃線(xiàn)和雙下劃線(xiàn)的使用詳解
在Python編程中,我們經(jīng)常會(huì)遇到單下劃線(xiàn)(_)和雙下劃線(xiàn)(__)的使用。它們?cè)诿麡?biāo)識(shí)符、變量、方法和屬性中扮演著不同的角色。本文將詳細(xì)解釋Python中單下劃線(xiàn)和雙下劃線(xiàn)的含義和用法,并通過(guò)代碼示例進(jìn)行講解,幫助你理解它們的作用和適用場(chǎng)景。
一、單下劃線(xiàn)(_)的使用
1.命名約定
在Python中,單下劃線(xiàn)作為命名約定,用于表示某個(gè)變量、方法或?qū)傩允莾?nèi)部使用的或具有特定含義,但不希望在外部直接訪(fǎng)問(wèn)。
代碼示例:
# 單下劃線(xiàn)作為命名約定
class MyClass:
def __init__(self):
self._internal_var = 42
def _internal_method(self):
return "Internal method"
def public_method(self):
return self._internal_method()在上面的例子中,變量_internal_var和方法_internal_method都以單下劃線(xiàn)開(kāi)頭。這是一種約定,告訴其他開(kāi)發(fā)人員這些成員是類(lèi)內(nèi)部使用的,不建議在類(lèi)外部直接訪(fǎng)問(wèn)。公共方法public_method可以訪(fǎng)問(wèn)內(nèi)部方法_internal_method。
2.避免命名沖突
單下劃線(xiàn)還可以用于避免命名沖突。當(dāng)我們?cè)趯?dǎo)入模塊時(shí),可以使用單下劃線(xiàn)作為前綴,以避免與當(dāng)前命名空間中的其他標(biāo)識(shí)符沖突。
代碼示例:
# 避免命名沖突 from mymodule import my_function, _internal_function
在上面的例子中,通過(guò)使用單下劃線(xiàn)前綴導(dǎo)入_internal_function函數(shù),我們可以明確指定該函數(shù)是模塊的內(nèi)部使用,而不是公共接口。
3.臨時(shí)變量
在一些情況下,我們可能只需要臨時(shí)使用某個(gè)變量,而不關(guān)心它的具體值。此時(shí),可以使用單下劃線(xiàn)作為變量名,表示它是一個(gè)無(wú)關(guān)緊要的臨時(shí)變量。
代碼示例:
# 使用單下劃線(xiàn)作為臨時(shí)變量
for _ in range(5):
print("Hello!")在上面的例子中,循環(huán)變量被命名為單下劃線(xiàn),這告訴其他開(kāi)發(fā)人員循環(huán)變量的具體值并不重要,只需要執(zhí)行循環(huán)體內(nèi)的代碼5次即可。
4.引入未使用的變量
有時(shí)候,在編碼過(guò)程中我們可能會(huì)定義一些變量,但在后續(xù)的代碼中并沒(méi)有使用它們。為了避免出現(xiàn)未使用變量的警告,可以使用單下劃線(xiàn)作為變量名。
代碼示例:
# 引入未使用的變量 _, y, _ = (1, 2, 3)
在上面的例子中,我們使用單下劃線(xiàn)占位符引入了一個(gè)未使用的變量。這樣做可以告訴讀者,我們?cè)谝庾R(shí)到該變量存在但并不關(guān)心它的具體值。
二、雙下劃線(xiàn)(__)的使用
1.名稱(chēng)修飾
雙下劃線(xiàn)用于名稱(chēng)修飾,即將屬性或方法前面的雙下劃線(xiàn)作為前綴,使其成為私有成員。私有成員只能在類(lèi)內(nèi)部訪(fǎng)問(wèn),無(wú)法在類(lèi)外部直接訪(fǎng)問(wèn)。
代碼示例:
# 雙下劃線(xiàn)作為名稱(chēng)修飾
class MyClass:
def __init__(self):
self.__private_var = 42
def __private_method(self):
return "Private method"
def public_method(self):
return self.__private_method()
obj = MyClass()
print(obj.public_method()) # 輸出:Private method
print(obj.__private_var) # 報(bào)錯(cuò):AttributeError: 'MyClass' object has no attribute '__private_var'在上面的例子中,屬性__private_var和方法__private_method都以雙下劃線(xiàn)開(kāi)頭,它們被視為私有成員。在類(lèi)外部無(wú)法直接訪(fǎng)問(wèn)私有成員,但可以通過(guò)公共方法public_method間接訪(fǎng)問(wèn)。
2.名稱(chēng)改寫(xiě)
雙下劃線(xiàn)還可用于名稱(chēng)改寫(xiě)(name mangling),即將屬性或方法前面的雙下劃線(xiàn)和類(lèi)名組合起來(lái),以防止子類(lèi)意外覆蓋父類(lèi)的屬性或方法。
代碼示例:
# 名稱(chēng)改寫(xiě)
class BaseClass:
def __init__(self):
self.__private_var = 42
class DerivedClass(BaseClass):
def __init__(self):
super().__init__()
self.__private_var = 10 # 不會(huì)改寫(xiě)父類(lèi)的私有屬性
obj = DerivedClass()
print(obj._BaseClass__private_var) # 輸出:42
print(obj._DerivedClass__private_var) # 輸出:10在上面的例子中,BaseClass定義了一個(gè)私有屬性__private_var,DerivedClass繼承自BaseClass并定義了一個(gè)同名的私有屬性。通過(guò)名稱(chēng)改寫(xiě),我們可以分別訪(fǎng)問(wèn)父類(lèi)和子類(lèi)的私有屬性。
3.魔術(shù)方法
雙下劃線(xiàn)在魔術(shù)方法中也扮演著重要的角色。魔術(shù)方法是一種特殊的方法,用于在特定情況下自動(dòng)調(diào)用,從而實(shí)現(xiàn)對(duì)對(duì)象的特定行為進(jìn)行定制。
代碼示例:
# 魔術(shù)方法
class MyClass:
def __init__(self, name):
self.name = name
def __str__(self):
return f"MyClass object (name: {self.name})"
obj = MyClass("Alice")
print(obj) # 輸出:MyClass object (name: Alice)在上面的例子中,__str__是一個(gè)魔術(shù)方法,用于在使用print函數(shù)打印對(duì)象時(shí)自動(dòng)調(diào)用。通過(guò)重寫(xiě)__str__方法,我們可以自定義對(duì)象的字符串表示形式。
三、總結(jié)
本文詳細(xì)解釋了Python中單下劃線(xiàn)和雙下劃線(xiàn)的使用。單下劃線(xiàn)作為命名約定、避免命名沖突、臨時(shí)變量和引入未使用的變量等方面發(fā)揮作用。雙下劃線(xiàn)用于名稱(chēng)修飾、名稱(chēng)改寫(xiě)和在魔術(shù)方法中扮演重要角色。掌握單下劃線(xiàn)和雙下劃線(xiàn)的使用,將幫助你更好地理解和應(yīng)用Python編程中的命名約定、代碼組織和對(duì)象行為定制。
以上就是Python中單下劃線(xiàn)和雙下劃線(xiàn)的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Python下劃線(xiàn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- python中單下劃線(xiàn)與雙下劃線(xiàn)的區(qū)別及說(shuō)明
- python?函數(shù)、變量中單下劃線(xiàn)和雙下劃線(xiàn)的區(qū)別詳解
- python中的單下劃線(xiàn)與雙下劃線(xiàn)以及絕對(duì)導(dǎo)入與相對(duì)導(dǎo)入
- Python中的單下劃線(xiàn)和雙下劃線(xiàn)使用場(chǎng)景詳解
- python中單下劃線(xiàn)(_)和雙下劃線(xiàn)(__)的特殊用法
- 淺談python 里面的單下劃線(xiàn)與雙下劃線(xiàn)的區(qū)別
- python單下劃線(xiàn)和雙下劃線(xiàn)屬性區(qū)別
相關(guān)文章
Python筆記之Scipy.stats.norm函數(shù)使用解析
這篇文章主要介紹了Python筆記之Scipy.stats.norm函數(shù)使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Jupyter Notebook 文件默認(rèn)目錄的查看以及更改步驟
這篇文章主要介紹了Jupyter Notebook 文件默認(rèn)目錄的查看以及更改步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
Python列表轉(zhuǎn)換為Excel表格第一列的方法詳解
在數(shù)據(jù)處理和分析的過(guò)程中,我們經(jīng)常需要將Python中的數(shù)據(jù)結(jié)構(gòu)(如列表)導(dǎo)出到Excel表格中,本文為大家整理了Python列表轉(zhuǎn)換為Excel表格第一列的幾種方法,希望對(duì)大家有所幫助2024-11-11
Python爬蟲(chóng)原理與基本請(qǐng)求庫(kù)urllib詳解
這篇文章主要介紹了Python爬蟲(chóng)原理與基本請(qǐng)求庫(kù)urllib詳解,爬蟲(chóng)就是通過(guò)模擬瀏覽器,按照一定的規(guī)則,自動(dòng)、大批量的獲取網(wǎng)絡(luò)資源,包括文本、圖片、鏈接、音頻、視頻等等,需要的朋友可以參考下2023-07-07
Python ckeditor富文本編輯器代碼實(shí)例解析
這篇文章主要介紹了Python ckeditor富文本編輯器代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
python庫(kù)umap有效地揭示高維數(shù)據(jù)的結(jié)構(gòu)和模式初探
這篇文章主要介紹了python庫(kù)umap有效地揭示高維數(shù)據(jù)的結(jié)構(gòu)和模式初探,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
OpenCV實(shí)現(xiàn)從灰度圖像切出Mask前景區(qū)域
本文主要介紹了如何利用OpenCV實(shí)現(xiàn)從灰度圖像,根據(jù)閾值,切出多個(gè)前景區(qū)域,過(guò)濾面積太小的圖像。文中的示例代碼講解詳細(xì),需要的可以參考一下2022-06-06
python opencv檢測(cè)目標(biāo)顏色的實(shí)例講解
下面小編就為大家分享一篇python opencv檢測(cè)目標(biāo)顏色的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
使用Tensorflow實(shí)現(xiàn)可視化中間層和卷積層
今天小編就為大家分享一篇使用Tensorflow實(shí)現(xiàn)可視化中間層和卷積層,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01

