激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python中下劃線的使用方法

Python中下劃線的使用方法

2020-05-25 08:57svbtle Python

這篇文章主要介紹了Python中下劃線的使用方法,是為python編程學習中的基本知識,需要的朋友可以參考下

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


單下劃線(_)

通常情況下,會在以下3種場景中使用:

1、在解釋器中:在這種情況下,“_”代表交互式解釋器會話中上一條執行的語句的結果。這種用法首先被標準CPython解釋器采用,然后其他類型的解釋器也先后采用。

?
1
2
3
4
5
6
7
8
9
10
>>> _ Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '_' is not defined
>>> 42
>>> _
42
>>> 'alright!' if _ else ':('
'alright!'
>>> _
'alright!'

2、作為一個名稱:這與上面一點稍微有些聯系,此時“_”作為臨時性的名稱使用。這樣,當其他人閱讀你的代碼時將會知道,你分配了一個特定的名稱,但是并不會在后面再次用到該名稱。例如,下面的例子中,你可能對循環計數中的實際值并不感興趣,此時就可以使用“_”。

?
1
2
3
n = 42
for _ in range(n):
 do_something()

3、國際化:也許你也曾看到”_“會被作為一個函數來使用。這種情況下,它通常用于實現國際化和本地化字符串之間翻譯查找的函數名稱,這似乎源自并遵循相應的C約定。例如,在Django文檔“轉換”章節中,你將能看到如下代碼:

 

?
1
2
3
4
5
from django.utils.translation import ugettext as _
from django.http import HttpResponse
def my_view(request):
 output = _("Welcome to my site.")
 return HttpResponse(output)

可以發現,場景二和場景三中的使用方法可能會相互沖突,所以我們需要避免在使用“_”作為國際化查找轉換功能的代碼塊中同時使用“_”作為臨時名稱。


名稱前的單下劃線(如:_shahriar)

程序員使用名稱前的單下劃線,用于指定該名稱屬性為“私有”。這有點類似于慣例,為了使其他人(或你自己)使用這些代碼時將會知道以“_”開頭的名稱只供內部使用。正如Python文檔中所述:

以下劃線“_”為前綴的名稱(如_spam)應該被視為API中非公開的部分(不管是函數、方法還是數據成員)。此時,應該將它們看作是一種實現細節,在修改它們時無需對外部通知。

正如上面所說,這確實類似一種慣例,因為它對解釋器來說確實有一定的意義,如果你寫了代碼“from <模塊/包名> import *”,那么以“_”開頭的名稱都不會被導入,除非模塊或包中的“__all__”列表顯式地包含了它們。了解更多請查看“Importing * in Python”。

名稱前的雙下劃線(如:__shahriar)

名稱(具體為一個方法名)前雙下劃線(__)的用法并不是一種慣例,對解釋器來說它有特定的意義。Python中的這種用法是為了避免與子類定義的名稱沖突。Python文檔指出,“__spam”這種形式(至少兩個前導下劃線,最多一個后續下劃線)的任何標識符將會被“_classname__spam”這種形式原文取代,在這里“classname”是去掉前導下劃線的當前類名。例如下面的例子: 

 

?
1
2
3
4
5
6
7
8
>>> class A(object):
... def _internal_use(self):
... pass
... def __method_name(self):
... pass
...
>>> dir(A())
['_A__method_name', ..., '_internal_use']

正如所預料的,“_internal_use”并未改變,而“__method_name”卻被變成了“_ClassName__method_name”。此時,如果你創建A的一個子類B,那么你將不能輕易地覆寫A中的方法“__method_name”。
 

?
1
2
3
4
5
6
>>> class B(A):
... def __method_name(self):
... pass
...
>>> dir(B())
['_A__method_name', '_B__method_name', ..., '_internal_use']

這里的功能幾乎和Java中的final方法和C++類中標準方法(非虛方法)一樣。

 

名稱前后的雙下劃線(如:__init__)

這種用法表示Python中特殊的方法名。其實,這只是一種慣例,對Python系統來說,這將確保不會與用戶自定義的名稱沖突。通常,你將會覆寫這些方法,并在里面實現你所需要的功能,以便Python調用它們。例如,當定義一個類時,你經常會覆寫“__init__”方法。

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

?
1
2
3
4
5
6
>>> class C(object):
... def __mine__(self):
... pass
...
>>> dir(C)
... [..., '__mine__', ...]

其實,很容易擺脫這種類型的命名,而只讓Python內部定義的特殊名稱遵循這種約定。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 毛片一区二区三区 | 欧美日韩亚洲国产精品 | 国产精品亚洲精品久久 | 欧美成人亚洲 | 中文字幕免费播放 | 欧美亚洲免费 | 国产精品视频在线观看免费 | 欧美精品网址 | 97久久精品一区二区三区观看 | 黄色大片网站在线观看 | 国产在线观看91精品 | 日本在线免费观看视频 | 粉嫩粉嫩一区二区三区在线播放 | 日本免费aaa观看 | 国产精品久久久久免费视频 | 久草在线手机视频 | 精品中文字幕在线播放 | 午夜精品久久久久久久久久久久久蜜桃 | 日本在线不卡免费 | 国产精品一区二区三区在线播放 | 伊人久久国产精品 | 免费看黄色一级大片 | 亚州精品天堂中文字幕 | 姑娘第四集免费看视频 | 毛片大全免费看 | 一区二区国产在线 | 黄色aaa视频 | 国产精品区一区二区三区 | 久久久久成人免费 | 亚洲视频综合网 | 精品国产一区二区三区久久久狼牙 | 成人在线免费视频播放 | 欧美成人se01短视频在线看 | 欧美又黄又嫩大片a级 | h视频免费看 | 国产精品剧情一区二区三区 | 色婷婷久久久亚洲一区二区三区 | 久草经典视频 | 中文字幕网站在线 | 日韩不卡一区二区 | 91短视频在线观看视频 |