课前回顾:默认类创建的对象是不可迭代的,如果一个类创建的对象判定为可迭代,那么这个对象所属的类中一定含有iter方法(迭代器)
目标:
1:什么是迭代器
2:知道循环遍历可迭代对象依次获取数据的原理
3:知道使用 iter 函数可获得可迭代对象的迭代器
4:知道使用next 函数可依次获得迭代器内的数据
5:掌握for循环遍历可迭代对象的本质
6:自定义迭代器类
一:什么是迭代器?
概念:用 for 循环遍历可迭代对象过程中,要有一个“人”来记录遍历访问第几个数据了,并且返回数据,以便于下一次遍历时返回的是下一个数据,这是把帮助我们记录遍历第几个数据的“人”称为迭代器(iterable)
注意事项
:
1:类创建的可迭代对象通过iter方法向我们提供了一个迭代器,我们在遍历一个可迭代对象时,其实是先获取可迭代对象提供的的迭代器,然后再通过这个迭代器依次获取对象中的每一个数据!
2:比如说列表是一个可迭代对象,那么列表会向外提供一个迭代器,这个迭代器会获取列表内每个数据用于遍历
3:只要是可迭代对象,都可以获取这个对象的迭代器
迭代器特点:
1:记录遍历的位置
2:提供下一个元素的值(配合next(迭代器)函数使用)
二:循环遍历可迭代对象依次获取数据的原理
列表(可迭代对象)→iter()函数获取迭代器→next(迭代器)函数依次获取迭代器内的数据!(执行几次next函数,获得几个可迭代对象数据)→捕获异常
三:获取可迭代对象的迭代器函数——iter()
功能:获取可迭代对象的迭代器
语法:iteratroobj = iter(可迭代对象)
快速代码体验
四:next()函数
功能:获取迭代器中的下一个元素的数据
语法:print(next(迭代器对象))
注意事项:
1:调用了几次next(迭代器对象)函数,就打印几次迭代器内的数据
2:如果调用next()函数的次数大于迭代器内的数据数量,程序报错
快速代码体验:
五:for循环遍历可迭代对象的底层原理
第一步:iter(可迭代对象)方法获取可迭代对象的迭代器 即调用可迭代对象类内的iter( )方法,iter( )方法返回的是一个迭代器类创建的迭代器
第二步:利用next(迭代器)方法依次获取数据,即多次调用迭代器类里面的next( )函数获取数据,直到数据全部获取成功结束迭代
第三步:捕获异常,如果next()函数调用次数大于迭代器内的数据数,程序报错,捕获这个异常防止程序报错
快速代码体验(异常截图):
for循环底层原理截图:
六:自定义迭代器类
自定义迭代器类注意事项:
1:类里面必须含有iter( )方法
2:类里面必须含有 _next( )方法
快速代码体验