为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 727 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信