内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Python中[]與list()哪個(gè)快-創(chuàng)新互聯(lián)

這篇文章主要介紹了Python中[]與list()哪個(gè)快,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)長(zhǎng)期為1000多家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為興化企業(yè)提供專(zhuān)業(yè)的做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)興化網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

在日常使用 Python 時(shí),我們經(jīng)常需要?jiǎng)?chuàng)建一個(gè)列表,相信大家都很熟練了吧?

# 方法一:使用成對(duì)的方括號(hào)語(yǔ)法list_a = []# 方法二:使用內(nèi)置的 list()list_b = list()復(fù)制代碼

上面的兩種寫(xiě)法,你經(jīng)常使用哪一個(gè)呢?是否思考過(guò)它們的區(qū)別呢?

讓我們開(kāi)門(mén)見(jiàn)山,直接拋出本文的問(wèn)題吧:兩種創(chuàng)建列表的 [] 與 list() 寫(xiě)法,哪一個(gè)更快呢,為什么它會(huì)更快呢?

注:為了簡(jiǎn)化問(wèn)題,我們以創(chuàng)建空列表為例進(jìn)行分析。關(guān)于列表的更多介紹與用法說(shuō)明,可以查看這篇文章

1、 [] 是 list() 的三倍快

對(duì)于第一個(gè)問(wèn)題,使用timeit模塊的 timeit() 函數(shù)就能簡(jiǎn)單地測(cè)算出來(lái):

>>> import timeit>>> timeit.timeit('[]', number=10**7)>>> timeit.timeit('list()', number=10**7)復(fù)制代碼

Python中[]與list()哪個(gè)快

如上圖所示,在各自調(diào)用一千萬(wàn)次的情況下,[] 創(chuàng)建方式只花費(fèi)了 0.47 秒,而 list() 創(chuàng)建方式要花費(fèi) 1.75 秒,所以,后者的耗時(shí)是前者的 3.7 倍!

這就回答了剛才的問(wèn)題:創(chuàng)建空列表時(shí),[] 要比 list() 快不少。

注:timeit() 函數(shù)的效率跟運(yùn)行環(huán)境相關(guān),每次執(zhí)行結(jié)果會(huì)有微小差異。我在 Python3.8 版本實(shí)驗(yàn)了幾次,總體上 [] 速度是 list() 的 3 倍多一點(diǎn)。

2、list() 比 [] 執(zhí)行步驟多

那么,我們繼續(xù)來(lái)分析一下第二個(gè)問(wèn)題:為什么 [] 會(huì)更快呢?

這一次我們可以使用dis模塊的 dis() 函數(shù),看看兩者執(zhí)行的字節(jié)碼有何差別:

>>> from dis import dis>>> dis("[]")>>> dis("list()")復(fù)制代碼

Python中[]與list()哪個(gè)快

如上圖所示,[] 的字節(jié)碼有兩條指令(BUILD_LIST 與 RETURN_VALUE),而 list() 的字節(jié)碼有三條指令(LOAD_NAME、CALL_FUNCTION 與 RETURN_VALUE)。

這些指令意味著什么呢?該如何理解它們呢?

首先,對(duì)于 [],它是 Python 中的一組字面量(literal),像數(shù)字之類(lèi)的字面量一樣,表示確切的固定值。

也就是說(shuō),Python 在解析到它時(shí),就知道它要表示一個(gè)列表,因此會(huì)直接調(diào)用解釋器中構(gòu)建列表的方法(對(duì)應(yīng) BUILD_LIST ),來(lái)創(chuàng)建列表,所以是一步到位。

而對(duì)于 list(),“l(fā)ist”只是一個(gè)普通的名稱(chēng),并不是字面量,也就是說(shuō)解釋器一開(kāi)始并不認(rèn)識(shí)它。

因此,解釋器的第一步是要找到這個(gè)名稱(chēng)(對(duì)應(yīng) LOAD_NAME)。它會(huì)按照一定的順序,在各個(gè)作用域中逐一查找(局部作用域--全局作用域--內(nèi)置作用域),直到找到為止,找不到則會(huì)拋出NameError。

解釋器看到“l(fā)ist”之后是一對(duì)圓括號(hào),因此第二步是把這個(gè)名稱(chēng)當(dāng)作可調(diào)用對(duì)象來(lái)調(diào)用,即把它當(dāng)成一個(gè)函數(shù)進(jìn)行調(diào)用(對(duì)應(yīng) CALL_FUNCTION)。

因此,list() 在創(chuàng)建列表時(shí),需要經(jīng)過(guò)名稱(chēng)查找與函數(shù)調(diào)用兩個(gè)步驟,才能真正開(kāi)始創(chuàng)建列表(注:CALL_FUNCTION 在底層還會(huì)有一些函數(shù)調(diào)用過(guò)程,才能走到跟 BUILD_LIST 相通的邏輯,此處我們忽略不計(jì))。

至此,我們就可以回答前面的問(wèn)題了:因?yàn)?list() 涉及的執(zhí)行步驟更多,因此它比 [] 要慢一些。

3、list() 的速度提升

看完前兩個(gè)問(wèn)題的解答過(guò)程,你也許覺(jué)得還不夠過(guò)癮,而且可能覺(jué)得就算知道了這個(gè)冷知識(shí),也不會(huì)有多大的幫助,似乎那微弱的提升顯得微不足道。

但是,我們Python貓出品的《Python為什么》系列一直秉承著孜孜不倦的求知精神,是不可能放著這個(gè)問(wèn)題不去回答的。

而且,由于有發(fā)散性思考的習(xí)慣,我還想到了另外一個(gè)挺有意思的問(wèn)題:list() 的速度能否提升呢?

我不久前寫(xiě)過(guò)一篇文章 正好討論到這個(gè)問(wèn)題,也就是在剛剛發(fā)布的 Python 3.9.0 版本中,它給 list() 實(shí)現(xiàn)了更快的 vectorcall 協(xié)議,因此執(zhí)行速度會(huì)有一定的提升。

Python中[]與list()哪個(gè)快

感興趣的同學(xué)可以去 Python 官網(wǎng)下載 3.9 版本。

根據(jù)我多輪的測(cè)試結(jié)果,在新版本中運(yùn)行 list() 一千萬(wàn)次,耗時(shí)大概在 1 秒左右,也就是 [] 運(yùn)行耗時(shí)的 2 倍,相比于前面接近 4 倍的數(shù)據(jù),當(dāng)前版本總體上是提升了不少。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Python中[]與list()哪個(gè)快內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,遇到問(wèn)題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!

分享文章:Python中[]與list()哪個(gè)快-創(chuàng)新互聯(lián)
URL分享:http://m.rwnh.cn/article2/cedgic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、虛擬主機(jī)、定制網(wǎng)站服務(wù)器托管、網(wǎng)站排名關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
新绛县| 大埔县| 南投市| 通州市| 平定县| 洛川县| 红安县| 南宁市| 甘谷县| 呼玛县| 蒙城县| 方城县| 崇阳县| 澄迈县| 儋州市| 萨嘎县| 宜宾市| 紫云| 田东县| 穆棱市| 清水县| 乳源| 松江区| 南乐县| 东至县| 收藏| 楚雄市| 遵化市| 祥云县| 正宁县| 桂东县| 象山县| 阿合奇县| 轮台县| 临城县| 额尔古纳市| 虎林市| 石阡县| 泾源县| 政和县| 霍山县|