猿问
python3 为什么要把 filter() 返回值改成迭代器对象?好处在哪?
python3 为什么要把 filter() 返回值改成迭代器对象?
好处在哪?
处理起来不是很麻烦,就是不明白 Python3 这样改的原因
函数式编程
浏览 728
回答 1
1回答
慕尼黑5688855
很简单的原因:memory saving。map和filter等函数返回一个迭代器,这个迭代器具有类生成器的特性。而我们知道生成器是懒加载的,它只有在下次调用的时候才会去计算本次生成的值,而不是像列表那样预先生成所有的值然后每次调用返回列表中的下一个值。这种方式需要将所有的值预先保存在列表中,当列表很大的时候这是非常消耗内存的。可以考虑下这样的场景:有一个2GB大小的文本文档,其中有千万级的用户记录,现在要用filter从其中找出所有用户名以abc开头的记录并且将它们写到另外一个文本文档中。如果filter返回的不是迭代器而直接是所有符合的用户记录列表的话,保存这些用户信息消耗的内存将会是非常惊人的,也是不可接受的。正因为filter返回的是迭代器,我们才可以以非常小的内存代价逐条从这样一个文本文档中读取并处理用户记录。
0
0
0
随时随地看视频
慕课网APP
相关分类
Python
我要回答