Python之道(4)---Python迭代器

来源:互联网 发布:织梦cms教程视频教程 编辑:程序博客网 时间:2024/04/30 03:11

迭代器Iterator

上一节所讲的生成器全部都是迭代器,但是迭代器不一定是生成器,要成为生成器,必须满足两个条件:

  • 有iter方法
  • 有next方法

迭代器是访问集合元素的一种方式。迭代器对象从集合元素的第一个对象开始访问,直到所有的对向都被访问,过程中迭代器只会往下一个元素访问,而不能向上一个元素访问。

延迟计算或惰性求值 (Lazy evaluation)

由上一节介绍生成器的特点,以及生成器都是迭代器我们知道迭代器所存在一些特性。迭代器在迭代到某个元素的时候才会计算该元素的值,而在访问之前或者之后这个值可以不存在或者被销毁。这个特点使它特别适合遍历一些巨大的甚至是无限的集合,减少内存的占用。

可迭代对象

凡是可作用于for循环的对象都是Iterable(可迭代)类型;

凡是可作用于next()函数的对象都是Iterator(迭代器)类型,它们表示一个惰性求值的序列;

集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

for循环可用于任何可迭代对象,for循环开始时,会通过迭代协议传输给iter()内置函数,从而能够从迭代对象中获得一个迭代器,返回的对象含有需要的next()方法

程序示例1
判断是否为可迭代对象:

from collections import Iterablea=isinstance([],Iterable)b=isinstance({},Iterable)c=isinstance('',Iterable)d=isinstance((),Iterable)print(a,b,c,d)

运行结果:

True True True True

程序示例2
判断是否为迭代器:

from collections import Iteratora=isinstance([],Iterator)b=isinstance({},Iterator)c=isinstance('',Iterator)d=isinstance((),Iterator)e=isinstance((x for x in range(10)),Iterator)print(a,b,c,d,e)

运行结果:

False False False False True

只要是Iterator的一定是Iterable的,反之则不成立。

原创粉丝点击