這篇文章主要介紹“Python中的下劃線有什么用”,在日常操作中,相信很多人在Python中的下劃線有什么用問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Python中的下劃線有什么用”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
南昌縣網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站開(kāi)發(fā)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
本文將討論P(yáng)ython中下劃線(_)字符的使用方法。我們將會(huì)看到,正如Python中的很多事情,下劃線的不同用法大多數(shù)(并非所有)只是常用慣例而已。
通常情況下,會(huì)在以下3種場(chǎng)景中使用:
1、在解釋器中:在這種情況下,“_”代表交互式解釋器會(huì)話中上一條執(zhí)行的語(yǔ)句的結(jié)果。這種用法首先被標(biāo)準(zhǔn)CPython解釋器采用,然后其他類型的解釋器也先后采用。
Python
>>> _ Traceback (most recent call last): File " NameError: name '_' is not defined >>> 42 >>> _ 42 >>> 'alright!' if _ else ':(' 'alright!' >>> _ 'alright!' |
2、作為一個(gè)名稱:這與上面一點(diǎn)稍微有些聯(lián)系,此時(shí)“_”作為臨時(shí)性的名稱使用。這樣,當(dāng)其他人閱讀你的代碼時(shí)將會(huì)知道,你分配了一個(gè)特定的名稱,但是并不會(huì)在后面再次用到該名稱。例如,下面的例子中,你可能對(duì)循環(huán)計(jì)數(shù)中的實(shí)際值并不感興趣,此時(shí)就可以使用“_”。
Python
n = 42 for _ in range(n): do_something() |
3、國(guó)際化:也許你也曾看到”_“會(huì)被作為一個(gè)函數(shù)來(lái)使用。這種情況下,它通常用于實(shí)現(xiàn)國(guó)際化和本地化字符串之間翻譯查找的函數(shù)名稱,這似乎源自并遵循相應(yīng)的C約定。例如,在Django文檔“轉(zhuǎn)換”章節(jié)中,你將能看到如下代碼:
Python
from django.utils.translation import ugettext as _ from django.http import HttpResponse def my_view(request): output = _("Welcome to my site.") return HttpResponse(output) |
可以發(fā)現(xiàn),場(chǎng)景二和場(chǎng)景三中的使用方法可能會(huì)相互沖突,所以我們需要避免在使用“_”作為國(guó)際化查找轉(zhuǎn)換功能的代碼塊中同時(shí)使用“_”作為臨時(shí)名稱。
程序員使用名稱前的單下劃線,用于指定該名稱屬性為“私有”。這有點(diǎn)類似于慣例,為了使其他人(或你自己)使用這些代碼時(shí)將會(huì)知道以“_”開(kāi)頭的名稱只供內(nèi)部使用。正如Python文檔中所述:
以下劃線“_”為前綴的名稱(如_spam)應(yīng)該被視為API中非公開(kāi)的部分(不管是函數(shù)、方法還是數(shù)據(jù)成員)。此時(shí),應(yīng)該將它們看作是一種實(shí)現(xiàn)細(xì)節(jié),在修改它們時(shí)無(wú)需對(duì)外部通知。漳州叉車租賃
正如上面所說(shuō),這確實(shí)類似一種慣例,因?yàn)樗鼘?duì)解釋器來(lái)說(shuō)確實(shí)有一定的意義,如果你寫了代碼“from <模塊/包名> import *”,那么以“_”開(kāi)頭的名稱都不會(huì)被導(dǎo)入,除非模塊或包中的“__all__”列表顯式地包含了它們。了解更多請(qǐng)查看“Importing * in Python”。
名稱(具體為一個(gè)方法名)前雙下劃線(__)的用法并不是一種慣例,對(duì)解釋器來(lái)說(shuō)它有特定的意義。Python中的這種用法是為了避免與子類定義的名稱沖突。Python文檔指出,“__spam”這種形式(至少兩個(gè)前導(dǎo)下劃線,最多一個(gè)后續(xù)下劃線)的任何標(biāo)識(shí)符將會(huì)被“_classname__spam”這種形式原文取代,在這里“classname”是去掉前導(dǎo)下劃線的當(dāng)前類名。例如下面的例子:
Python
>>> class A(object): ... def _internal_use(self): ... pass ... def __method_name(self): ... pass ... >>> dir(A()) ['_A__method_name', ..., '_internal_use'] |
正如所預(yù)料的,“_internal_use”并未改變,而“__method_name”卻被變成了“_ClassName__method_name”。此時(shí),如果你創(chuàng)建A的一個(gè)子類B,那么你將不能輕易地覆寫A中的方法“__method_name”。
Python
>>> class B(A): ... def __method_name(self): ... pass ... >>> dir(B()) ['_A__method_name', '_B__method_name', ..., '_internal_use'] |
這里的功能幾乎和Java中的final方法和C++類中標(biāo)準(zhǔn)方法(非虛方法)一樣。
這種用法表示Python中特殊的方法名。其實(shí),這只是一種慣例,對(duì)Python系統(tǒng)來(lái)說(shuō),這將確保不會(huì)與用戶自定義的名稱沖突。通常,你將會(huì)覆寫這些方法,并在里面實(shí)現(xiàn)你所需要的功能,以便Python調(diào)用它們。例如,當(dāng)定義一個(gè)類時(shí),你經(jīng)常會(huì)覆寫“__init__”方法。
雖然你也可以編寫自己的特殊方法名,但不要這樣做。
Python
>>> class C(object): ... def __mine__(self): ... pass ... >>> dir(C) ... [..., '__mine__', ...] |
其實(shí),很容易擺脫這種類型的命名,而只讓Python內(nèi)部定義的特殊名稱遵循這種約定。
到此,關(guān)于“Python中的下劃線有什么用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!