python3 為什么要把 filter() 返回值改成迭代器對象?好處在哪?處理起來不是很麻煩,就是不明白 Python3 這樣改的原因
1 回答

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