在以下的文章之中我们来了解一下什么是python中生成器。了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用。

python生成器是什么?

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:>>> L = [x * x for x in range(10)]

>>> L

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> g = (x * x for x in range(10))

>>> g

at 0x1022ef630>

我们创建了一个generator后,通过for循环来迭代它,并且不需要关心StopIteration的错误。

generator非常强大。如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现。

比如,著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:def fib(max):

n, a, b = 0, 0, 1

while n < max:

print(b)

a, b = b, a + b

n = n + 1

return "done"

注意,赋值语句:a, b = b, a + b

相当于:t = (b, a + b) # t是一个tuplea = t[0]b = t[1]

但不必显式写出临时变量t就可以赋值。

上面的函数可以输出斐波那契数列的前N个数:>>> fib(6)112358"done"

仔细观察,可以看出,fib函数实际上是定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,这种逻辑其实非常类似generator。

也就是说,上面的函数和generator仅一步之遥。要把fib函数变成generator,只需要把print(b)改为yield b就可以了:def fib(max):

n, a, b = 0, 0, 1

while n < max: yield b

a, b = b, a + b

n = n + 1

return "done"

这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:>>> f = fib(6)

>>> f

这里,最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

以上就是本篇文章所讲述的所有内容,这篇文章主要介绍了相关于python中生成器的知识,希望你能借助资料从而理解上述所说的内容。希望我在这片文章所讲述的内容能够对你有所帮助,让你学习python更加轻松。

更多相关知识,请访问Gxl网Python教程栏目。

以上就是python中的生成器是什么?生成器有什么用处?的详细内容,更多请关注Gxl网其它相关文章!

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

python的 是什么-python中的生成器是什么?生成器有什么用处?相关推荐

  1. 用python证明,【python办公自动化(17)】利用python向PPT文档中写入内容(证书生成器)...

    幻灯片的母版行及占位符 PPT母版 占位符 添加Slide和内容 查看母版信息 import os os.chdir("D:\\python_major\\auto_office17&quo ...

  2. Python中的yield关键字及表达式、生成器、生成器迭代器、生成器表达式详解

    文章目录 1. yield关键字及表达式.生成器.生成器迭代器.生成器表达式 1.1 yield关键字及表达式(yield expression) 1.1.1 yield关键字 1.1.2 yield ...

  3. Python高级特性(切片,迭代,列表生成式,生成器,迭代器)

    掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...

  4. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

  5. Python学习day12(生成器,列表/生成器推导式)

    Python学习day12(生成器,列表/生成器推导式) 生成器 初始生成器 我们知道的迭代器有两种:一种是调用方法直接返回的,一种是可迭代对象通过执行iter方法得到的,迭代器有的好处是可以节省内存 ...

  6. python关键字详解_Python 中的关键字with详解

    在 Python 2.5 中,with关键字被加入.它将常用的 try ... except ... finally ...模式很方便的被复用.看一个最经典的例子: with open('file.t ...

  7. python生成器迭代器_python 生成器 迭代器

    阅读目录 一 递归和迭代 二 什么是迭代器协议 三 python中强大的for循环机制 四 为何要有for循环 五 生成器初探 六 生成器函数 七 生成器表达式和列表解析 八 生成器总结 一 递归和迭 ...

  8. python程序如何执行死刑_「Python基础知识」Python生成器函数

    原标题:「Python基础知识」Python生成器函数 对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采 ...

  9. python天天向上代码解析-python列表解析和生成器表达式

    列表解析在需要改变列表而不是需要新建某列表时,可以使用列表解析.列表解析表达式为: [expr for iter_var in iterable] [expr for iter_var in iter ...

  10. Python如何在循环语句中加入两个变量_Python基础知识

    一.Python关键字 共:31个.注意:如果要现在自己电脑中运行我写的这些代码,需要在第一行加上 #coding:utf-8,因为我的输出中有中文.1.and:表示逻辑'与'2.del:用于list ...

最新文章

  1. 图论:关于二分图的总结(转载)
  2. iOS 数组中的模型去重
  3. 如何打开写好的jpetstore
  4. java判断两个int相等_Java 判断两个变量是否相等
  5. Ubuntu/Deepin--How to remove packeges?
  6. PHP修改PHP.ini上传大文件的解决办法
  7. oracle database 11g 如何正确卸载
  8. android checkbox 选中事件_挖穿Android第四十九天
  9. 51nod 省选联测 R2
  10. JavaScript or JQuery 获取服务器时间
  11. Hive时间戳TIMESTAMP使用的限制
  12. 一家世界500强企业为什么还要做不赚钱的生意?
  13. 理解Android的手势识别
  14. 赛道对比测试高尔夫6/7 全面解析后悬架
  15. VMware 配置虚拟机端口映射,实现局域网络互相访问
  16. java之final的各种用法
  17. 数据聚合技术Aggregation
  18. “出神”才能提高创造力——史蒂芬 · 科特勒 杰米 · 威尔
  19. SQL格式日志转为syslog格式:触发器中执行Shell命令
  20. 【160313 18:00】四则运算 2 的单元测试

热门文章

  1. UNITY把3D模型显示在UI层级上的思路
  2. 【自译】八步成为数据科学家
  3. ECshop商城程序常见的96个小问题汇总
  4. STM32的启动分析
  5. AB1601LED之pwm
  6. linux设备模型之Class
  7. 打家劫舍系列(dp)
  8. python—操作MySQL增加数据
  9. [crypto]-30-The Armv8 Cryptographic Extension在linux中的应用
  10. (3)段描述符,段选择子,LES指令