小说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 条评论
登录 后参与评论

相关文章

来自专栏编程

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

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

19460
来自专栏我和PYTHON有个约会

07.程序编程基础1~概述

计算机程序,我们通常会解释说是由指令和代码组成,同样也可以说是由数据结构和算法组成;其实这两种说法的核心意义都是一样的,都是通过一系列有序的操作来完成数据的处理...

8320
来自专栏云霄雨霁

Java--深入理解内部类

18250
来自专栏nnngu

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

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

382110
来自专栏java一日一条

常见Java面试题 – 第四部分:迭代(iteration)和递归(recursion)

A. 可重入方法(re-entrant method)是可以安全进入的方法,即使同一个方法正在被执行,深入到同一个线程的调用栈里面也不会影响此次执行的安全性。一...

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

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

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

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

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

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

29070
来自专栏老付的网络博客

如何使用正则表达式

说到正则,可能很多人会很头疼这个东西,除了计算机好像很难快速的读懂这个东西,更不用说如果使用了。下面我们由浅入深来探索下正则表达式:

14920
来自专栏C语言及其他语言

数组越界为什么没有出错

数组越界 在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不...

424100
来自专栏用户2442861的专栏

python编码问题

我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。

18910

扫码关注云+社区

领取腾讯云代金券