迭代器 Iterator 基本内容

迭代器 Iterator

学习资料

先介绍一个概念:Iterable(可迭代对象。可以直接作用于for循环的对象。

像集合数据类型(list,tuple,dict,set,str等) 和generator(包括生成器和带yield的generator function)都是可迭代对象。

那么,什么是 Iterator 呢?它和 Iterable 又有什么区别?

Iterator(迭代器) 是可以被next()函数调用并不断返回下一个值的对象。

它表示的是一个数据流。我们可以将它看成一个有序序列,但是不能提前知道序列的长度(因为要被next()调用实现计算下一个数据,直到没有数据时抛出StopIteration错误。)这里也可以看出,Iterator的计算是惰性的,因为只有在需要返回下一个数据时,它才会计算。

Iterator 可以表示一个无限大的数据流,比如全体自然数。这是list做不到滴。

下面就来看看如何使用迭代器。

之前已经学习了判断可迭代对象的方法,再回顾一下:

>>> from collections import Iterable

>>> isinstance('abc', Iterable)

True

判断是否为迭代器的方法类似:

>>> from collections import Iterator

>>> isinstance((x for x in range(10)),Iterator)

True

>>>isinstance('abc',Iterator)   //str不是迭代器,因为不能用next()调用并返回下一个值。

False

如果要将 Iterable 变成 Iterator,可以用iter()函数:

>>> isinstance(iter('abc'),Iterator)

True

⚠️注意:

Python的for循环,本质上是通过不断调用next()函数实现的。

举个例子:

>>> for x in[1,2,3,4]: print(x)

1

2

3

4

实际上完全等价于:

>>> it =iter([1,2,3,4])

>>> while True:

              try:

                  x = next(it)

              except StopIteration:

                  break

7.20 学习打卡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值