高性能Python-range和xrange

我們通常會(huì)聽(tīng)說(shuō),在for循環(huán)中要使用range來(lái)代替xrange,xrange更能節(jié)省內(nèi)存,先來(lái)看一下這兩個(gè)的實(shí)現(xiàn):

def range(start, stop, step=1):
    numbers = []
    while start < stop:
        numbers.append(start)
        start += step
    return numbers

def xrange(start, stop, step=1):
    while start < stop:
        yield start
        start += stop
  • range會(huì)預(yù)先生成范圍內(nèi)所有的整數(shù),存入一個(gè)List中,然后返回List,我們知道List的append的操作是額外消耗內(nèi)存的。
  • xrange不會(huì)預(yù)先生成所有的數(shù)字,通過(guò)yield,每次被請(qǐng)求時(shí),yield只會(huì)生成并返回一個(gè)對(duì)象,當(dāng)超出range時(shí),StopIteration會(huì)拋出。從內(nèi)存看,一個(gè)N個(gè)元素的loop,相比xrange,range會(huì)多消耗N倍的內(nèi)存。
  • 迭代器,我們知道loop需要一個(gè)迭代器,然后不斷調(diào)用next(),知道StopIteration。
  • 使用range的流程是:創(chuàng)建一個(gè)完整的List,返回List,調(diào)用List的iter函數(shù),返回一個(gè)迭代器。事實(shí)上,我們只需要一個(gè)迭代器,但是卻創(chuàng)建了一個(gè)列表...
  • 使用xrange的流程是:xrange會(huì)直接返回一個(gè)迭代器。我們可以看到range的流程更為復(fù)雜,做了很多額外的操作,消耗的計(jì)算和內(nèi)存資源更多。
  • 使用range時(shí),這個(gè)預(yù)先分配List內(nèi)存很要命,比如,range(100000000)會(huì)分配800MB內(nèi)存...對(duì)于一個(gè)C developer來(lái)說(shuō),嚇?biāo)懒恕?/li>
>>> import sys
>>> a = range(100000000)
>>> sys.getsizeof(a)
800000072
>>> 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • PYTHON-進(jìn)階-ITERTOOLS模塊小結(jié)轉(zhuǎn)自wklken:http://wklken.me/posts/20...
    C_Y_閱讀 1,183評(píng)論 0 2
  • 一些基本概念 1 容器 可以詢問(wèn)某個(gè)元素是否包含其中,如list,set,tuples,dict等都是容器 2 迭...
    和黑黑閱讀 761評(píng)論 0 5
  • range 函數(shù)說(shuō)明:range([start,]stop[,step]),根據(jù)start與stop指定的范圍以及...
    西多的大叔閱讀 319評(píng)論 0 0
  • 基本數(shù)據(jù)類型和運(yùn)算 基本數(shù)據(jù)類型Python中最基本的數(shù)據(jù)類型包括整型,浮點(diǎn)數(shù),布爾值和字符串。類型是不需要聲明的...
    SeanCheney閱讀 1,298評(píng)論 0 12
  • 第一章 人生若只如初見(jiàn) 如果人和人之間的關(guān)系是可以在相遇第一眼時(shí)便知曉以后的故事,那么你還會(huì)這樣義無(wú)反...
    陳若魚(yú)小姐閱讀 745評(píng)論 0 0

友情鏈接更多精彩內(nèi)容