小说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(gh_5b8f0c59b682)

原文发表时间:2018-04-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【专业知识】C/C++指针三

今天我们主要介绍函数指针、函数的指针参数以及返回指针的函数 A) 函数指针   C++规定,一个函数的地址就是这个函数的名字。我们需要指出的就是一个指针需要指定...

2797
来自专栏技术点滴

《Effective C++》读书摘要

《Effective C++》读书摘要 最近刚读完侯捷的《Effective C++》,相对来说,这本书的内容比较贴近基础,对于刚掌握C++基础的人会有不少的提...

1706
来自专栏编程

给初学者:JavaScript 中数组操作注意点

作者:CarterLi https://segmentfault.com/a/1190000012463583 不要用 for_in 遍历数组 这是 JavaS...

1796
来自专栏机器学习算法与Python学习

python基础-字符串与编码

转载于:廖雪峰的官方网站-python教程 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数字...

45911
来自专栏nnngu

算法05 五大查找之:顺序查找

这一篇要介绍的是算法中的查找算法。查找在我们生活中无处不在,比如查公交,查机票,查酒店等等。 首先看一下查找的分类。如下图: ? 那么这一篇要总结的是顺序表中的...

36711
来自专栏http://www.cnblogs.com

内置函数filter()和匿名函数lambda解析

一.内置函数filter filter()函数是 Python 内置的一个高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是...

31612
来自专栏云霄雨霁

Java--深入理解内部类

1645
来自专栏郭耀华‘s Blog

Java命名规范

Java命名规范 定义规范的目的是为了使项目的代码样式统一,使程序有良好的可读性。 包的命名  (全部小写,由域名定义) Java包的名字都是由小写单词组...

4639
来自专栏小樱的经验随笔

【正则表达式学习笔记之一】简单认识正则表达式

一、引言   正则表达式是什么东东?   在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句...

2003
来自专栏程序员互动联盟

聊聊C语言-编程世界的容器

上一篇聊聊C语言-存储世界的奥秘,我们介绍了计算机的整个存储体系设计,了解了我们的数据在计算机中是怎么被存储的。然而在我们的编程中我们的代码也是按照这个结构被计...

3867

扫码关注云+社区