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

迭代器Iterator

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

  • 有iter方法
  • 有next方法

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

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

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

可迭代对象

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

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

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

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

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

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

运行结果:

True True True True

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

from collections import Iterator
a=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的,反之则不成立。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值