学习迭代器是为了学习生成器,学习生成器是为了学习协程,协程就是实现多任务的一种方式
知道什么是可迭代对象,能够使用isinstance检测对象是否可迭代
知道使用iter函数可以获取可迭代对象的迭代器
知道使用next函数可以获得迭代器数据
(1)迭代的意思就是遍历的意思,所以可迭代即为可遍历
(2)常见的可遍历的对象:列表List,元组tuple,字符串,字典,range
(3)一般不可遍历的对象:数字、和自定义myclass(默认)
(4)myclass对象所属的类MyClass如果包含了__ iter __ 方法,此时,myclass就为一个可迭代对象
(5)可迭代对象的本质:对象所属的类中包含了__ iter__方法,其中__ iter__方法就是一个迭代器,即包含了迭代器的对象都是可迭代对象
(6)检测一个对象是否可以迭代,用isinstance(待检测对象,Iterable)
使用isinstance(待检测对象,Iterable),用来验证待检测对象是否为Iterable的类或子类的对象
"""
isinstance(待检测对象,Iterable)
返回True,则为可迭代,False为不可迭代
"""
print(isinstance([1,2,3],Iterable)) # True
我们分析对可迭代对象进行迭代使用的过程中,发现每迭代一次(即在for…in…中每循环一次)都会返回对象中的下一条数据,一直向后读数据直到迭代了所有数据后结束。那么在这个过程中就应该由一个”人“去记录每次访问到了第几条数据,以便每次迭代都可以返回下一条数据。我们把这个能帮助我们进行数据迭代的”人“称为迭代器
可迭代对象通过__ iter __方法向我们提供一个迭代器,我们在迭代一个可迭代对象时,实际上就是先获取该对象提供的一个迭代器,然后通过这个迭代器来一次获取对象中的每一条数据
如何获取可迭代对象的迭代器:
iter(可迭代对象) # 返回一个该可迭代对象的迭代器
如何使用迭代器获取下一个元素:
next(迭代器) # 使用迭代器来获取下一个元素
(1)记录遍历的位置
(2)提供下一个元素的值(配合next()函数)
(1)通过iter(可迭代对象)获取要遍历的对象的迭代器
(2)next(迭代器)获取下一个元素
(3)帮我们捕获了StopIteration异常
类需要满足以下要求:
(1)有__ iter __ 函数
(2)有__ next __ 函数
(3)此时,该类的对象既是迭代器又是可迭代对象