小说python中的迭代器(Iterator)

小说python2和python3的差异一文中,
在说明range,xrange,map的差异时
提到IterableIterator,有朋友反馈没留意过这两个东东,
这里就小说一把,认识一下

Iterable和Iterator

Iterable: 可迭代对象

直接作用于for循环的对象统称为可迭代对象

list tuple dict set str等集合数据类型
还有Iterator generator map等迭代器或是迭代器子类

Iterator: 迭代器

官方说明官方说明

被next()函数调用并不断返回下一个值的对象

本质上是实现了__iter__,__next__方法(python2是__iter__,next方法)

相互关系:

对于众多的对象,
实在不知道是什么类型就这么判断下吧

1from collections import Iterable,Iterator
2isinstance([], Iterable)   # True
3isinstance(map(lambda x: x-1,range(5)),Iterator)  # True

迭代器的特性

最大特点是延迟计算(lazy evaluation)方式返回元素,按需调用call by need的方式
不是与list等集合数据类型一样一次性将所有元素加载到内存中

它还具备下面几个特点:

  • 不能向后移动
  • 不能回到开始
  • 只能一次迭代
  • 不能切片和索引

一次迭代一次迭代
无法切片和索引无法切片和索引

迭代器应用

节省内存

典型应用:
操作大文件

read readlines 方法都是将文件一次读到内存中,
文件太大,就会造成内存溢出

通常的做法是

1with open(filename, 'r') as flie:
2    for line in file:
3        print(line)

适用场景:

  • 不关心元素的随机访问
  • 元素的个数不确定

后记

迭代器在python中是个很重要的对象,很多对象都具有迭代器的特性,或是其子对象
生成器是迭代器的一个重要子对象
而python的协程与生成器又有千丝万缕的关系
迭代器->生成器->协程层层递进
迭代器作为一个基础,清楚的认知是很有必要的


下面的是我的公众号二维码图片,欢迎关注我。

图注:chafezhou公众号图注:chafezhou公众号


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值