亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python3 為什么要把 filter() 返回值改成迭代器對象?好處在哪?

python3 為什么要把 filter() 返回值改成迭代器對象?好處在哪?

函數式編程 2019-01-05 18:05:35
python3 為什么要把 filter() 返回值改成迭代器對象?好處在哪?處理起來不是很麻煩,就是不明白 Python3 這樣改的原因
查看完整描述

1 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

很簡單的原因:memory saving。map和filter等函數返回一個迭代器,這個迭代器具有類生成器的特性。而我們知道生成器是懶加載的,它只有在下次調用的時候才會去計算本次生成的值,而不是像列表那樣預先生成所有的值然后每次調用返回列表中的下一個值。這種方式需要將所有的值預先保存在列表中,當列表很大的時候這是非常消耗內存的。
可以考慮下這樣的場景:有一個2GB大小的文本文檔,其中有千萬級的用戶記錄,現在要用filter從其中找出所有用戶名以abc開頭的記錄并且將它們寫到另外一個文本文檔中。如果filter返回的不是迭代器而直接是所有符合的用戶記錄列表的話,保存這些用戶信息消耗的內存將會是非常驚人的,也是不可接受的。正因為filter返回的是迭代器,我們才可以以非常小的內存代價逐條從這樣一個文本文檔中讀取并處理用戶記錄。

查看完整回答
反對 回復 2019-01-05
  • 1 回答
  • 0 關注
  • 746 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號