Python——迭代器详解(全是干货)

学习目标

  • 学习迭代器是为了学习生成器,学习生成器是为了学习协程,协程就是实现多任务的一种方式

  • 知道什么是可迭代对象,能够使用isinstance检测对象是否可迭代

  • 知道使用iter函数可以获取可迭代对象的迭代器

  • 知道使用next函数可以获得迭代器数据

1. 可迭代对象

(1)迭代的意思就是遍历的意思,所以可迭代即为可遍历

(2)常见的可遍历的对象:列表List,元组tuple,字符串,字典,range

(3)一般不可遍历的对象:数字、和自定义myclass(默认)

(4)myclass对象所属的类MyClass如果包含了__ iter __ 方法,此时,myclass就为一个可迭代对象

(5)可迭代对象的本质:对象所属的类中包含了__ iter__方法,其中__ iter__方法就是一个迭代器,即包含了迭代器的对象都是可迭代对象

(6)检测一个对象是否可以迭代,用isinstance(待检测对象,Iterable)

1.1 可迭代对象的检测

使用isinstance(待检测对象,Iterable),用来验证待检测对象是否为Iterable的类或子类的对象

"""
isinstance(待检测对象,Iterable) 
返回True,则为可迭代,False为不可迭代
"""

print(isinstance([1,2,3],Iterable)) # True

1.2 什么是迭代器

我们分析对可迭代对象进行迭代使用的过程中,发现每迭代一次(即在for…in…中每循环一次)都会返回对象中的下一条数据,一直向后读数据直到迭代了所有数据后结束。那么在这个过程中就应该由一个”人“去记录每次访问到了第几条数据,以便每次迭代都可以返回下一条数据。我们把这个能帮助我们进行数据迭代的”人“称为迭代器

可迭代对象通过__ iter __方法向我们提供一个迭代器,我们在迭代一个可迭代对象时,实际上就是先获取该对象提供的一个迭代器,然后通过这个迭代器来一次获取对象中的每一条数据

如何获取可迭代对象的迭代器

iter(可迭代对象) # 返回一个该可迭代对象的迭代器

如何使用迭代器获取下一个元素

next(迭代器) # 使用迭代器来获取下一个元素

1.3 迭代器的特点

(1)记录遍历的位置
(2)提供下一个元素的值(配合next()函数)

1.4 for循环的本质

(1)通过iter(可迭代对象)获取要遍历的对象的迭代器
(2)next(迭代器)获取下一个元素
(3)帮我们捕获了StopIteration异常

1.5 自定义可迭代类

类需要满足以下要求:
(1)有__ iter __ 函数
(2)有__ next __ 函数
(3)此时,该类的对象既是迭代器又是可迭代对象
Python——迭代器详解(全是干货)_第1张图片

你可能感兴趣的:(Python)