文章內(nèi)容主要是詳細(xì)介紹了pythonmemory_profiler庫制作器和迭代器cpu占用的時(shí)間分析,文章內(nèi)容緊扣主題進(jìn)行詳盡的基本介紹,感興趣的朋友可以了解一下
不進(jìn)行計(jì)算時(shí),生成器和list空間占用
import time from memory_profiler import profile profile(precision=4) def list_fun(): start=time.time() total=([i for i in range(5000000)]) print('iter_spend_time:',time.time()-start) profile(precision=4) def gent_func(): gent_start=time.time() total=(i for i in range(5000000)) print('gent_spend_time:',time.time()-gent_start) iter_fun() gent_func()
顯示結(jié)果的內(nèi)涵:第一行表明已剖析編碼的號(hào)碼,第二列(Mem應(yīng)用情況)表明實(shí)行當(dāng)列后Python編譯器的內(nèi)存使用情況。第三列(增長)表明現(xiàn)階段行相較于最后一行的運(yùn)行內(nèi)存差別。最終某列(行具體內(nèi)容)打印出已講解的編碼。
剖析:在沒有來計(jì)算的情形下,目錄list和迭代器會(huì)占空間,但是對(duì)于制作器不容易占空間
當(dāng)要測(cè)算,list和制作器的耗費(fèi)時(shí)間和占用內(nèi)存
使用sum內(nèi)置函數(shù),list和制作器求合10000000個(gè)數(shù)據(jù)信息,listcpu占用比較大,制作器耗費(fèi)時(shí)間大約是list的二倍
import time from memory_profiler import profile profile(precision=4) def iter_fun(): start=time.time() total=sum([i for i in range(10000000)]) print('iter_spend_time:',time.time()-start) profile(precision=4) def gent_func(): gent_start=time.time() total=sum(i for i in range(10000000)) print('gent_spend_time:',time.time()-gent_start) iter_fun() gent_func()
對(duì)比分析,必要時(shí)對(duì)信息進(jìn)行迭代更新使用中,制作器方式的用時(shí)很長,但內(nèi)存使用上還是偏少,由于應(yīng)用制作器時(shí),運(yùn)行內(nèi)存只存放每一次迭代計(jì)算的信息。查找原因時(shí)個(gè)人覺得,制作器的迭代計(jì)算環(huán)節(jié)中,在迭代更新數(shù)據(jù)與測(cè)算立即持續(xù)變換,對(duì)比與迭代器目標(biāo)中先將它們所有儲(chǔ)存在運(yùn)行內(nèi)存中(盡管占用內(nèi)存,但載入比再度迭代更新要快點(diǎn)),因而,制作器較為耗時(shí)間,但占用內(nèi)存小。
記錄數(shù)據(jù)循環(huán)系統(tǒng)求合500000個(gè)數(shù)據(jù)信息,迭代器和制作器循環(huán)系統(tǒng)得到時(shí)
匯總:基本上與此同時(shí)成功,迭代器的占用內(nèi)存比較大
import time from memory_profiler import profile itery=iter([i for i in range(5000000)]) gent=(i for i in range(5000000)) profile(precision=4) def iter_fun(): start=time.time() total=0 for item in itery: total+=item print('iter:',time.time()-start) profile(precision=4) def gent_func(): gent_start=time.time() total=0 for item in gent: total+=item print('gent:',time.time()-gent_start) iter_fun() gent_func() list,迭代器和生成器共同使用sum計(jì)算5000000個(gè)數(shù)據(jù)時(shí)間比較
總結(jié):list+sum和迭代器+sum計(jì)算時(shí)長差不多,但生成器+sum計(jì)算的時(shí)長幾乎長一倍,
import time from memory_profiler import profile profile(precision=4) def list_fun(): start=time.time() print('start!!!') list_data=[i for i in range(5000000)] total=sum(list_data) print('iter_spend_time:',time.time()-start) profile(precision=4) def iter_fun(): start=time.time() total=0 total=sum(iter([i for i in range(5000000)])) print('total:',total) print('iter_spend_time:',time.time()-start) profile(precision=4) def gent_func(): gent_start=time.time() total=sum(i for i in range(5000000)) print('total:',total) print('gent_spend_time:',time.time()-gent_start) list_fun() iter_fun() gent_func()
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)韼椭?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/128837.html
摘要:生成器的內(nèi)部一直在停頓和恢復(fù)之間切換,直到循環(huán)完成或停頓位置缺點(diǎn)生成器不能滿足所有迭代器的需求,因?yàn)槿绻徊樵儯善饔肋h(yuǎn)不知道下一個(gè)要迭代的值是什么,在生成器中無法后退或前進(jìn)。 一.迭代器 分析:想一下,如果把集合對(duì)象和對(duì)集合對(duì)象的操作放在一起,當(dāng)我們想換一種方式遍歷集合對(duì)象中元素時(shí),就需要修改集合對(duì)象了,違背單一職責(zé)原則,而迭代器模式將數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)的算法分離開,兩者可獨(dú)立發(fā)展...
摘要:來說說迭代器和生成器,還有可迭代對(duì)象和生成器表達(dá)式。有點(diǎn)繞是不是,其實(shí),一般只要知道可迭代對(duì)象以及它是如何實(shí)現(xiàn)的就行了,中常常用生成器來代替迭代器,可以說,生成器就是迭代器。 來說說迭代器和生成器,還有可迭代對(duì)象和生成器表達(dá)式。 之前簡(jiǎn)單的提到過,一個(gè)對(duì)象是可迭代的可以理解為能夠使用for循環(huán)。這樣說其實(shí)不太準(zhǔn)確,某個(gè)對(duì)象可迭代是因?yàn)樗鼉?nèi)部實(shí)現(xiàn)了$__iter__$這個(gè)特殊方法。比如在...
摘要:本文重點(diǎn)掌握可迭代的對(duì)象的定義掌握可迭代對(duì)象迭代器與生成器之間的關(guān)系和異同熟悉標(biāo)準(zhǔn)庫中生成器。二迭代器迭代器介紹迭代器用于從集合中取出元素的對(duì)象。若想再次迭代須重建迭代器。迭代器檢查方式調(diào)用,。區(qū)別可迭代的對(duì)象不是迭代器。 導(dǎo)語:本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之控制流程篇的重點(diǎn)知識(shí)及個(gè)人心得,打算入門Python的朋友們可以來一起學(xué)習(xí)并交流。 本文重點(diǎn): 1、掌握可迭代的對(duì)象的...
摘要:顯然,要理解,首先要了解迭代器,接著了解什么是生成器。生成器上述代碼中,就是一個(gè)迭代器,循環(huán)部分就是迭代過程。迭代器和生成器的執(zhí)行效率因?yàn)樯善鬟叺吷桑哉加脙?nèi)存極少,執(zhí)行效率也更高。 顯然,要理解yield,首先要了解迭代器(iterator),接著了解什么是生成器(generator)。 迭代器 通俗的講,迭代器就是可以逐個(gè)訪問的容器,而逐個(gè)逐步訪問的過程成為迭代。 ite...
閱讀 919·2023-01-14 11:38
閱讀 891·2023-01-14 11:04
閱讀 750·2023-01-14 10:48
閱讀 2039·2023-01-14 10:34
閱讀 956·2023-01-14 10:24
閱讀 834·2023-01-14 10:18
閱讀 506·2023-01-14 10:09
閱讀 583·2023-01-14 10:02