生成器和迭代器

迭代器(iterator)

实现了__iter__和__next__方法的对象都称为迭代器。迭代器是一个有状态的对象,在调用next() 的时候返回下一个值,如果容器中没有更多元素了,则抛出StopIteration异常。

迭代器是一种Lazy Load的模式,只有在调用时才生成值,没有调用的时候就等待下一次调用。

生成器: 生成器是一个返回迭代器的函数

几个大是大非的问题要明确:

  1. 实现了_iter_()方法的对象,叫做【可迭代对象】
  2. 实现了next()方法的对象,叫做【迭代器对象】
  3. 往往【迭代器对象】也同时实现了_iter_()方法,同时成为【可迭代对象】
  4. 生成器就是一个迭代器,它是用生产器函数那种语法,来得到的一个【迭代器对象】

 

生成器可以理解成一种特殊的迭代器,它和迭代器的区别在于,生成器并不是一上来就把所有值装载进内存,因而也不会占用大量的内存,只是在需要使用next()函数获取值的时候,才会取一个值返回,内存开销非常小。

作者:diablo
链接:https://www.zhihu.com/question/20829330/answer/469905401
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

 

posted @ 2020-06-03 11:08  不带R的墨菲特  阅读(195)  评论(0)    收藏  举报