打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python 生成器 & 迭代器

在聊生成器之前,我们先看看什么是生成式?

  a = [i*2 for i in range(10) ]    类似于这样的就是生成式

       

 

  而把列表 “ [ ] ” 符号换成 " () " 则就称为 generator 类型

  

 

 

什么是生成器?

  在 Python 中,使用了 yield 的函数被称为生成器。

  跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

生成器的特点:

  1).只有在调用时才会生成相应的数据

  2).只记录当前位置

  3).只有一个__next__() 方法。在python2.7中是  next()

 

下面我们用斐波那契数列,写一个生成器:

 

 

那么我们为什么要用生成器,它的优点是什么呢?

  由于生成器只有在调用时,才会生成数据,所以它可以节省内存占用。而且生成器可在单线程下实现并发运算处理效果,这点很牛逼。

以下是并行效果代码演示:

 

 

接下来我们来看看什么是迭代器?

  我们知道,可以直接作用于for 循环的数据类型有以下几种:

    一类是集合数据类型,如 list、tuple、dict、set、str 等;

    一类是generator,包括生成器和带yield的generator function。

    我们把这些可以直接作用于for循环的对象统称为可迭代对象:Iterable 。

  像生成器这样,不但可以作用于for循环,还可以被next() 函数不断调用并返回下一个值,

直到最后抛出StopIteration 错误表示无法继续返回下一个值了。我们把这种可以被next()函数

调用并不断返回下一个值的对象称为迭代器:Iterator。

  由此可见,我们可以知道,生成器肯定是一个迭代器,但迭代器不一定是生成器。

  当然我们也可以使用 iter() 函数,把可迭代对象(Iterable)变成迭代器(Iterator)

        

 

        

 

 

小结:

  凡是可作用于for 循环的对象都是 Iterable 类型;

  凡是可作用于next() 函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

  集合数据类型如list 、dict、str等是Iterable但不是Iterator,不过可以通过iter() 函数获得一个 Iterator 对象。

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python生成器和迭代器有什么用?
Python迭代器定义及用法详解
一篇就能解决 Python迭代对象、迭代器、生成器
弄懂这 6 个问题,拿下 Python 生成器!
Python迭代和生成操作小结
更深入理解 Python 中的迭代
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服