课前回顾:默认类创建的对象是不可迭代的,如果一个类创建的对象判定为可迭代,那么这个对象所属的类中一定含有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(可迭代对象)
    快速代码体验

    image.png

    四:next()函数

    功能:获取迭代器中的下一个元素的数据
    语法:print(next(迭代器对象))
    注意事项:
    1:调用了几次next(迭代器对象)函数,就打印几次迭代器内的数据
    2:如果调用next()函数的次数大于迭代器内的数据数量,程序报错

    快速代码体验:

    image.png

    五:for循环遍历可迭代对象的底层原理

    第一步:iter(可迭代对象)方法获取可迭代对象的迭代器 即调用可迭代对象类内iter( )方法,iter( )方法返回的是一个迭代器类创建的迭代器

    第二步:利用next(迭代器)方法依次获取数据,即多次调用迭代器类里面的next( )函数获取数据,直到数据全部获取成功结束迭代

    第三步:捕获异常,如果next()函数调用次数大于迭代器内的数据数,程序报错,捕获这个异常防止程序报错

    快速代码体验(异常截图):

    image.png

    for循环底层原理截图:

    image.png


    六:自定义迭代器类

    自定义迭代器类注意事项:
    1:类里面必须含有iter( )方法
    2:类里面必须含有 _next
    ( )方法

    快速代码体验

    image.png