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 对象。

(0)

相关推荐

  • Python学习——for循环,生成器,迭代器详解

    文章目录 Python的for循环 for循环示例 List 列表循环 dict 字典循环 列表生成式 生成器 列表式生成器 函数式生成器 生成器式生产者消费者模型 迭代器 什么是迭代器 再论for循 ...

  • Python生成器和迭代器有什么用?

    当我们学习Python的时候,会遇到很多专业的术语及工具,而对于这些很多人并不是很了解,比如说生成器和迭代器,Python的生成器和迭代器有什么区别?这是很多人都比较疑惑的问题,我们来看看吧. 迭代器 ...

  • Python学习之迭代器和生成器有什么不同?

    迭代器和生成器区别是什么?相信很多人在初学Python的时候对它们都很好奇,接下来我们一起来看看它们的区别吧. 迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己的本身 ...

  • Python中迭代器和生成器的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • Python生成器与迭代器

    Python生成器与迭代器,Python生成器与迭代器对于喜欢Python开发的小伙伴们来说应该是不陌生的,不了解的小伙伴也没有关系,本篇文章小编就给小伙伴们详解一下Python生成器与迭代器,感兴趣 ...

  • Python 生成器里面的 return 有什么用?

    大家好,我是安果! 最近,在交流群里,有一位小伙伴问了这样一个问题: def gen_data(num):     if num > 10:         for i in range(num ...

  • 第18天:Python 之迭代器

    第18天:Python 之迭代器

  • Python生成器的详细介绍

    Python生成器的详细介绍,首先生成器是Python初级开发者最难理解的概念之一,虽被认为是Python编程中的高级技能,但在各种项目中可以随处见到生成器的身影,你得不得去理解它.使用它.甚至爱上它 ...

  • Python迭代器与生成器的区别!

    无论你是Python初学者还是爱好者,相信大家都听说过迭代器与生成器,但是很多同学搞不懂Python迭代器与生成器到底是什么?它们之间又有什么样的关系呢?接下来,小编通过这篇文章为大家介绍一下. 什么 ...

  • 一文读懂Python可迭代对象、迭代器和生成器

    IT头条 每日推送最新.最热点的IT界新闻 马化腾回应"腾讯没有梦想"截图系网友PS:天天P图回应<我的前世青年照>涉嫌收集个人隐私:马云称阿里不愿招北大清华毕业生-- ...

  • python菜鸟教程学习8:迭代器与生成器

    迭代器 python最强大的功能之一,访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束,迭代器只能往前不会后退. 迭代器有 ...