一:什么是迭代器协议
迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代器中的下一项,要么就引起一个stoplteration异常,以终止协议(只能往后走不能往前)
可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个_iter_()方法)
协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min函数等)使用迭代器协议访问对象。
二:for循环机制
for循环机制的本质:循环所有对象,全部都是使用迭代器协议。
三:什么是生成器
1. 生成器,可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的_iter_方法),所以生成器就是可迭代对象。
2. 生成器分类:在python中有两种表现形式(python有两种不同的方式提供生成器)
【1】生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果,yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便于下次从它离开的地方继续执行。
【2】生成器表达式:类似于列表推导,但是生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表。
3.列表解析:
总结:
1.把列表解析的[]换成()得到的就是生成器表达式
2.列表解析与生成器表达式都是一种便利的变成方式,只不过生成器表达式更加节省内存
3.Python不但使用迭代器协议让for循环更加通用。大部分内置函数也是使用迭代器协议访问对象的。例如,sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以,我们可以直接计算一系列值得和:
而不用多此一举的先构造一个列表:
领取专属 10元无门槛券
私享最新 技术干货