欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中下劃線(xiàn)的使用方法

 更新時(shí)間:2015年03月27日 15:41:48   作者:svbtle  
這篇文章主要介紹了Python中下劃線(xiàn)的使用方法,是為python編程學(xué)習(xí)中的基本知識(shí),需要的朋友可以參考下

本文將討論P(yáng)ython中下劃線(xiàn)(_)字符的使用方法。我們將會(huì)看到,正如Python中的很多事情,下劃線(xiàn)的不同用法大多數(shù)(并非所有)只是常用慣例而已。


單下劃線(xiàn)(_)

通常情況下,會(huì)在以下3種場(chǎng)景中使用:

1、在解釋器中:在這種情況下,“_”代表交互式解釋器會(huì)話(huà)中上一條執(zhí)行的語(yǔ)句的結(jié)果。這種用法首先被標(biāo)準(zhǔn)CPython解釋器采用,然后其他類(lèi)型的解釋器也先后采用。

>>> _ Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '_' is not defined
>>> 42
>>> _
42
>>> 'alright!' if _ else ':('
'alright!'
>>> _
'alright!'

2、作為一個(gè)名稱(chēng):這與上面一點(diǎn)稍微有些聯(lián)系,此時(shí)“_”作為臨時(shí)性的名稱(chēng)使用。這樣,當(dāng)其他人閱讀你的代碼時(shí)將會(huì)知道,你分配了一個(gè)特定的名稱(chēng),但是并不會(huì)在后面再次用到該名稱(chēng)。例如,下面的例子中,你可能對(duì)循環(huán)計(jì)數(shù)中的實(shí)際值并不感興趣,此時(shí)就可以使用“_”。

n = 42
for _ in range(n):
 do_something()

3、國(guó)際化:也許你也曾看到”_“會(huì)被作為一個(gè)函數(shù)來(lái)使用。這種情況下,它通常用于實(shí)現(xiàn)國(guó)際化和本地化字符串之間翻譯查找的函數(shù)名稱(chēng),這似乎源自并遵循相應(yīng)的C約定。例如,在Django文檔“轉(zhuǎn)換”章節(jié)中,你將能看到如下代碼:

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í)名稱(chēng)。


名稱(chēng)前的單下劃線(xiàn)(如:_shahriar)

程序員使用名稱(chēng)前的單下劃線(xiàn),用于指定該名稱(chēng)屬性為“私有”。這有點(diǎn)類(lèi)似于慣例,為了使其他人(或你自己)使用這些代碼時(shí)將會(huì)知道以“_”開(kāi)頭的名稱(chēng)只供內(nèi)部使用。正如Python文檔中所述:

以下劃線(xiàn)“_”為前綴的名稱(chēng)(如_spam)應(yīng)該被視為API中非公開(kāi)的部分(不管是函數(shù)、方法還是數(shù)據(jù)成員)。此時(shí),應(yīng)該將它們看作是一種實(shí)現(xiàn)細(xì)節(jié),在修改它們時(shí)無(wú)需對(duì)外部通知。

正如上面所說(shuō),這確實(shí)類(lèi)似一種慣例,因?yàn)樗鼘?duì)解釋器來(lái)說(shuō)確實(shí)有一定的意義,如果你寫(xiě)了代碼“from <模塊/包名> import *”,那么以“_”開(kāi)頭的名稱(chēng)都不會(huì)被導(dǎo)入,除非模塊或包中的“__all__”列表顯式地包含了它們。了解更多請(qǐng)查看“Importing * in Python”。

名稱(chēng)前的雙下劃線(xiàn)(如:__shahriar)

名稱(chēng)(具體為一個(gè)方法名)前雙下劃線(xiàn)(__)的用法并不是一種慣例,對(duì)解釋器來(lái)說(shuō)它有特定的意義。Python中的這種用法是為了避免與子類(lèi)定義的名稱(chēng)沖突。Python文檔指出,“__spam”這種形式(至少兩個(gè)前導(dǎo)下劃線(xiàn),最多一個(gè)后續(xù)下劃線(xiàn))的任何標(biāo)識(shí)符將會(huì)被“_classname__spam”這種形式原文取代,在這里“classname”是去掉前導(dǎo)下劃線(xiàn)的當(dāng)前類(lèi)名。例如下面的例子: 

>>> 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è)子類(lèi)B,那么你將不能輕易地覆寫(xiě)A中的方法“__method_name”。
 

>>> class B(A):
... def __method_name(self):
... pass
...
>>> dir(B())
['_A__method_name', '_B__method_name', ..., '_internal_use']

這里的功能幾乎和Java中的final方法和C++類(lèi)中標(biāo)準(zhǔn)方法(非虛方法)一樣。

名稱(chēng)前后的雙下劃線(xiàn)(如:__init__)

這種用法表示Python中特殊的方法名。其實(shí),這只是一種慣例,對(duì)Python系統(tǒng)來(lái)說(shuō),這將確保不會(huì)與用戶(hù)自定義的名稱(chēng)沖突。通常,你將會(huì)覆寫(xiě)這些方法,并在里面實(shí)現(xiàn)你所需要的功能,以便Python調(diào)用它們。例如,當(dāng)定義一個(gè)類(lèi)時(shí),你經(jīng)常會(huì)覆寫(xiě)“__init__”方法。

雖然你也可以編寫(xiě)自己的特殊方法名,但不要這樣做。
 

>>> class C(object):
... def __mine__(self):
... pass
...
>>> dir(C)
... [..., '__mine__', ...]

其實(shí),很容易擺脫這種類(lèi)型的命名,而只讓Python內(nèi)部定義的特殊名稱(chēng)遵循這種約定。

相關(guān)文章

  • 解讀Python中字典的key都可以是什么

    解讀Python中字典的key都可以是什么

    這篇文章主要介紹了解讀Python中字典的key都可以是什么,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Python?分支結(jié)構(gòu)詳解

    Python?分支結(jié)構(gòu)詳解

    這篇文章主要介紹了Python?分支結(jié)構(gòu),分支結(jié)構(gòu)包括單分支結(jié)構(gòu)、雙分支結(jié)構(gòu)、多分支結(jié)構(gòu)等內(nèi)容,下文ui分支結(jié)構(gòu)進(jìn)行詳細(xì)分析,需要的小伙伴可以參考一下
    2022-02-02
  • Python實(shí)現(xiàn)識(shí)別手寫(xiě)數(shù)字 簡(jiǎn)易圖片存儲(chǔ)管理系統(tǒng)

    Python實(shí)現(xiàn)識(shí)別手寫(xiě)數(shù)字 簡(jiǎn)易圖片存儲(chǔ)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)識(shí)別手寫(xiě)數(shù)字,簡(jiǎn)易圖片存儲(chǔ)管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 對(duì)python多線(xiàn)程SSH登錄并發(fā)腳本詳解

    對(duì)python多線(xiàn)程SSH登錄并發(fā)腳本詳解

    今天小編就為大家分享一篇對(duì)python多線(xiàn)程SSH登錄并發(fā)腳本詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 記錄模型訓(xùn)練時(shí)loss值的變化情況

    記錄模型訓(xùn)練時(shí)loss值的變化情況

    這篇文章主要介紹了記錄模型訓(xùn)練時(shí)loss值的變化情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python中?join()?函數(shù)的使用示例講解

    Python中?join()?函數(shù)的使用示例講解

    Python中有join()和os.path.join()兩個(gè)函數(shù),這篇文章主要介紹了Python中?join()?函數(shù)的使用方法,需要的朋友可以參考下
    2023-04-04
  • 對(duì)于Python的Django框架部署的一些建議

    對(duì)于Python的Django框架部署的一些建議

    這篇文章主要介紹了對(duì)于Python的Django框架部署的一些建議,包括項(xiàng)目文件的布局等,需要的朋友可以參考下
    2015-04-04
  • Python中的numpy數(shù)組維度擴(kuò)展詳解

    Python中的numpy數(shù)組維度擴(kuò)展詳解

    這篇文章主要介紹了Python中的numpy數(shù)組維度擴(kuò)展詳解,在numpy數(shù)組中,切片功能非常常用,例如x[:]表示取x的所有元素,可以通過(guò)在切片中增加None或者np.newaxis實(shí)現(xiàn),它們的作用就是在相應(yīng)的位置上增加一個(gè)維度,在這個(gè)維度上只有一個(gè)元素,需要的朋友可以參考下
    2023-09-09
  • 在pyqt5中QLineEdit里面的內(nèi)容回車(chē)發(fā)送的實(shí)例

    在pyqt5中QLineEdit里面的內(nèi)容回車(chē)發(fā)送的實(shí)例

    今天小編就為大家分享一篇在pyqt5中QLineEdit里面的內(nèi)容回車(chē)發(fā)送的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • APIStar:一個(gè)專(zhuān)為Python3設(shè)計(jì)的API框架

    APIStar:一個(gè)專(zhuān)為Python3設(shè)計(jì)的API框架

    今天小編就為大家分享一篇關(guān)于一個(gè)專(zhuān)為Python3設(shè)計(jì)的API框架:APIStar,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-09-09

最新評(píng)論