Python 中下劃線的 6 個(gè)作用
初學(xué)者看到 Python 中的下劃線 _ 時(shí)可能會(huì)有些懵圈,不知道這個(gè)到底是干什么用的,今天就來盤點(diǎn)一下 Python 中的下劃線有哪些用處。以后看到下劃線時(shí)就可以對號入座了。
1、用在 Python 解釋器,表示上一次的執(zhí)行結(jié)果
即使不把 Python 用于編程,也可以把它用作智能計(jì)算器,下劃線保存上次的計(jì)算結(jié)果,在計(jì)算時(shí)相當(dāng)方便:
>>>?4?+?3
7
>>>?_
7
>>>?_?+?2
9
>>>?a?=?10
>>>?_
9
2、代碼中一個(gè)獨(dú)立的下劃線,表示這個(gè)變量不重要
一個(gè)獨(dú)立的下劃線,它也是一個(gè)變量名,只不過它比較特殊,當(dāng)你使用下劃線作為變量名時(shí),就代表你告訴大家,這個(gè)變量不重要,僅僅占個(gè)位置,可以忽略,后面不會(huì)再使用它。
當(dāng)然了,這只是一種約定俗成,你要是不遵守也是可以的,畢竟在后面你還可以通過下劃線來獲取這個(gè)變量的值。
for?i,?_?in?[(1,?2),?(3,?4)]:
????print(i)
上面的代碼表示我們只需要列表內(nèi)部元組的第一個(gè),第二個(gè)其實(shí)賦值給了下劃線,雖然后面你可以通過下滑線來取到值,但是強(qiáng)烈建議你不要這么做,這違反了約定。
3、類的內(nèi)部,雙下劃線作為變量名或函數(shù)名的開頭,表示私有
私有變量或函數(shù),只能在類的內(nèi)部來使用,不可在外部訪問或更改,比如,在 module_b.py 中有一個(gè)類 A,類 A 有一個(gè)雙下劃線開頭的變量名:
class?A:
????__private_var?=?1000
????def?__init__(self)?->?None:
????????self.__private_var2?=?2000
????????self.var3?=?3000
當(dāng)我們在另一個(gè)文件中引用 A 時(shí),就無法訪問到私有變量:
import?module_b
if?__name__?==?'__main__':
????a?=?module_b.A()
????print(a.__private_var)
這里會(huì)報(bào)錯(cuò)

當(dāng)然了,如果你一定要訪問,也是可以的,只需在私有變量前加個(gè)_類名,比如上面的代碼中改為 print(a._A__private_var) 就可以正確打印 1000。
不能直接訪問 __private_var 是因?yàn)?Python 解釋器對外把__private_var 變量改成了_A__private_var:
print(dir(a))
#['_A__private_var',?'_A__private_var2',?'__class__',?'__delattr__',?'__dict__',?'__dir__',?'__doc__',?'__eq__',?'__format__',?'__ge__',?'__getattribute__',?'__gt__',?'__hash__',?'__init__',?'__init_subclass__',?'__le__',?'__lt__',?'__module__',?'__ne__',?'__new__',?'__reduce__',?'__reduce_ex__',?'__repr__',?'__setattr__',?'__sizeof__',?'__str__',?'__subclasshook__',?'__weakref__',?'var3']
有些時(shí)候,你會(huì)看到以一個(gè)下劃線開頭的實(shí)例變量名,比如 _name,這樣的實(shí)例變量外部是可以訪問的,但是,按照約定俗成的規(guī)定,當(dāng)你看到這樣的變量時(shí),意思就是,“雖然我可以被訪問,但是,請把我視為私有變量,不要隨意訪問”。
Python 本身沒有任何機(jī)制阻止你干壞事,一切全靠自覺
4、雙下劃線開頭和結(jié)尾的方法,是魔術(shù)方法
比如常見的 '__init__', '__dict__', '__dir__', '__doc__', '__eq__' 等等。
具體可以閱讀如何寫出令人驚嘆的Python類
5、作為變量名中間的一部分
相比駝峰命名,這叫做蛇形命名,比如 user_name。
6、作為數(shù)字中間的一部分,更易讀
>>>?10_000_000
10000000
>>>?1_280_500_000?==?1280500000
True
最后的話
本文梳理了下劃線在 Python 中的 6 類用法,如果有收獲還請點(diǎn)贊,在看,關(guān)注,感謝支持。
