文章內(nèi)容主要是詳細介紹了pythonmemory_profiler庫制作器和迭代器cpu占用的時間分析,文章內(nèi)容緊扣主題進行詳盡的基本介紹,感興趣的朋友可以了解一下
不進行計算時,生成器和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()
顯示結果的內(nèi)涵:第一行表明已剖析編碼的號碼,第二列(Mem應用情況)表明實行當列后Python編譯器的內(nèi)存使用情況。第三列(增長)表明現(xiàn)階段行相較于最后一行的運行內(nèi)存差別。最終某列(行具體內(nèi)容)打印出已講解的編碼。
剖析:在沒有來計算的情形下,目錄list和迭代器會占空間,但是對于制作器不容易占空間
當要測算,list和制作器的耗費時間和占用內(nèi)存
使用sum內(nèi)置函數(shù),list和制作器求合10000000個數(shù)據(jù)信息,listcpu占用比較大,制作器耗費時間大約是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()
對比分析,必要時對信息進行迭代更新使用中,制作器方式的用時很長,但內(nèi)存使用上還是偏少,由于應用制作器時,運行內(nèi)存只存放每一次迭代計算的信息。查找原因時個人覺得,制作器的迭代計算環(huán)節(jié)中,在迭代更新數(shù)據(jù)與測算立即持續(xù)變換,對比與迭代器目標中先將它們所有儲存在運行內(nèi)存中(盡管占用內(nèi)存,但載入比再度迭代更新要快點),因而,制作器較為耗時間,但占用內(nèi)存小。
記錄數(shù)據(jù)循環(huán)系統(tǒng)求合500000個數(shù)據(jù)信息,迭代器和制作器循環(huán)系統(tǒng)得到時
匯總:基本上與此同時成功,迭代器的占用內(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計算5000000個數(shù)據(jù)時間比較
總結:list+sum和迭代器+sum計算時長差不多,但生成器+sum計算的時長幾乎長一倍,
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>
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/128837.html
摘要:生成器的內(nèi)部一直在停頓和恢復之間切換,直到循環(huán)完成或停頓位置缺點生成器不能滿足所有迭代器的需求,因為如果不查詢,生成器永遠不知道下一個要迭代的值是什么,在生成器中無法后退或前進。 一.迭代器 分析:想一下,如果把集合對象和對集合對象的操作放在一起,當我們想換一種方式遍歷集合對象中元素時,就需要修改集合對象了,違背單一職責原則,而迭代器模式將數(shù)據(jù)結構和數(shù)據(jù)結構的算法分離開,兩者可獨立發(fā)展...
摘要:來說說迭代器和生成器,還有可迭代對象和生成器表達式。有點繞是不是,其實,一般只要知道可迭代對象以及它是如何實現(xiàn)的就行了,中常常用生成器來代替迭代器,可以說,生成器就是迭代器。 來說說迭代器和生成器,還有可迭代對象和生成器表達式。 之前簡單的提到過,一個對象是可迭代的可以理解為能夠使用for循環(huán)。這樣說其實不太準確,某個對象可迭代是因為它內(nèi)部實現(xiàn)了$__iter__$這個特殊方法。比如在...
摘要:本文重點掌握可迭代的對象的定義掌握可迭代對象迭代器與生成器之間的關系和異同熟悉標準庫中生成器。二迭代器迭代器介紹迭代器用于從集合中取出元素的對象。若想再次迭代須重建迭代器。迭代器檢查方式調(diào)用,。區(qū)別可迭代的對象不是迭代器。 導語:本文章記錄了本人在學習Python基礎之控制流程篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學習并交流。 本文重點: 1、掌握可迭代的對象的...
摘要:顯然,要理解,首先要了解迭代器,接著了解什么是生成器。生成器上述代碼中,就是一個迭代器,循環(huán)部分就是迭代過程。迭代器和生成器的執(zhí)行效率因為生成器邊迭代邊生成,所以占用內(nèi)存極少,執(zhí)行效率也更高。 顯然,要理解yield,首先要了解迭代器(iterator),接著了解什么是生成器(generator)。 迭代器 通俗的講,迭代器就是可以逐個訪問的容器,而逐個逐步訪問的過程成為迭代。 ite...
閱讀 1068·2023-01-14 11:38
閱讀 1064·2023-01-14 11:04
閱讀 905·2023-01-14 10:48
閱讀 2380·2023-01-14 10:34
閱讀 1148·2023-01-14 10:24
閱讀 1028·2023-01-14 10:18
閱讀 657·2023-01-14 10:09
閱讀 735·2023-01-14 10:02