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