python迭代器和生成器

一、什么是迭代器协议

  1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stoplteration异常,以终止迭代(只能             往后走,不能往前退)

  2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)

  3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象


可迭代对象

可迭代对象泛指一类对象,不是指的每一种对象,确切的说满足以下的条件的对象可以成为可迭代对象:

1. 对象实现了__iter__方法

2. __iter__方法返回了一个迭代器对象

我们比较容易理解的可迭代对象,比如说可以用for语句去遍历,实际for语句的内部实现应该就是首先调用对象的__iter__方法,获取一个迭代器对象,接着不停的调用迭代器对象的__next__方法,循环遍历取值。

迭代器对象(迭代器)

迭代器协议包括这些条件:

1.对象实现了__next__方法

2.__next__方法返回了某个数值(当然一般情况下,我们需要的是返回这个对象的特定的数字,并且按照一定的顺序进行依次返回)

3.__next__方法需要在值取完的时候,抛出StopIteration的错误信息。

总结:

可迭代对象是 调用对象的__iter__方法能够返回迭代器对象的一种对象。

迭代器对象是实现了迭代器协议的对象。


迭代器应用

运行主函数


二、什么是生成器?

可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己的内置的__iter__方法),所以生成器就是可迭代对象

1.生成器函数:常规函数的定义,但是,使用yield语句而不是return语句返回结果。yield语句语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行


2.生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表



为何使用生成器之生成器的特点

Python使用生成器对延迟操作提供了支持。所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果。这也是生产层器的主要好处。

生成器小结:

a.是可迭代对象

b.实现了延迟计算,省内存

c.生成器本质和其他的数据类型一样,都是实现了迭代器协议,只不过生成器附加了一个延迟计算省内存的好处


三、生成器读取大量数据应用案例




文件实例:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代...
    Mr_Bluyee阅读 1,452评论 0 1
  • 文章来源:python 生成器和迭代器有这篇就够了 什么是迭代器? 迭代器是访问集合元素的一种方式。迭代器对象从集...
    YYL07阅读 599评论 0 4
  • 我们知道我们可以用列表储存数据,可是当我们的数据特别大的时候建立一个列表的储存数据就会很占内存的。如通过...
    mysimplebook阅读 285评论 0 0
  • 作者:邵正将 来源:PytLab 在python中生成器可以很方便的实现迭代协议。生成器通过生成器函数产生,生成器...
    PyChina阅读 1,640评论 0 6
  • 放眼整个乐坛,恐怕再也找不出一个像Beyond的乐队,他们凭借着不死的音乐精神,影响了一代又一代人。他们的歌,唱家...
    壹号公园音乐艺术阅读 3,376评论 0 3

友情链接更多精彩内容