前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小说python中的迭代器(Iterator)

小说python中的迭代器(Iterator)

作者头像
用户2196567
发布2018-07-02 12:02:40
6260
发布2018-07-02 12:02:40
举报
文章被收录于专栏:chafezhou

小说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方法)

相互关系:

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

代码语言:javascript
复制
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 方法都是将文件一次读到内存中, 文件太大,就会造成内存溢出

通常的做法是

代码语言:javascript
复制
1with open(filename, 'r') as flie:
2    for line in file:
3        print(line)

适用场景:

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

后记

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


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 chafezhou 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Iterable和Iterator
  • 迭代器的特性
  • 迭代器应用
  • 后记
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档