在以下的文章之中我们来了解一下什么是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更加轻松。

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

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

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

  1. python编程在哪里写-python入门该从哪里开始?

    相信对于每个人而言,知道编程和学习编程这件事,出发点是不同的.汤哥在北京接触编程的时间是2013年,那个时候还在一个二线城市上大学,还没有这么多各种融资,各种互联网创业的氛围,大家想的更多的是一些线下 ...

  2. python编程300集免费-python 300本电子书合集

    链接: https://pan.baidu.com/s/1CNlB35ASnDNlUGNCZJbiAA 提取码: fxig Q群:592857363 更多所在 数据科学速查表 零起点Python机器学 ...

  3. python编程输入标准-揭秘python编程技巧

    揭秘python编程技巧 一.python的标准输入和输出[root@133 wc]# vim stdin.py #!/usr/bin/python #encoding:utf-8 import sy ...

  4. Python编程好学吗 为什么Python如此受欢迎

    Python编程好学吗?为什么Python如此受欢迎?Python的包装能力.可组合性.可嵌入性都很好,可以把各种复杂性包装在Python模块里,暴露出漂亮的接口.因此,Python自然是大受欢迎. ...

  5. 手机版python编程软件下载,手机python编程软件

    1.求 python 64位安装包下载 软件介绍: python是一款面向对象.解释型.动态数据类型的高级编程设计语言.它拥有语言上的简洁性.可读性和易维护性,在图形处理.数学处理.文本处理.系统编程 ...

  6. python编程锦囊_跟着Python编程锦囊,一起探索精彩的Python编程世界

    <Python编程锦囊>从开发中经常遇到的实际问题和开发中必备的关键技能.难点技术出发. 对开发中经常遇到的实际问题和需要掌握的实用技能进行了系统的梳理.总结和提炼,编写了150个适用于P ...

  7. python编程方式_自学python编程的方法路线

    怎么自学python编程 如何自学Python编程?一堆的Python教程却感觉无从下手呢?我想这应该是很多Python初学者正在纠结的问题. 今天想要分享给大家的是如何自学Python编程,学习这件 ...

  8. 树莓派python编程优点_树莓派为什么会使用python编程?为什么有时python运行效率不高?...

    在许多编程语言中,Python的语法也有很大不同.Python使用空格或缩进来分隔不同的代码块.C语言和其他语言使用花括号来区分不同的代码块,例如if语句,Python使用冒号和缩进来定义代码块.这也 ...

  9. python编程入门-Python编程入门经典pdf(Python编程入门教程) 高清中文版

    Python编程入门经典pdf(Python编程入门教程)下载.Python编程入门经典pdf高清版帮助各位更好的进行Python编程的学习以及理解,最经典的课题,最深入的概念,让你在Python编程 ...

  10. python开发cs程序_CSE209代做、代写Computer Graphics、代做CS/python编程设计代写Python程序|代做Processing...

    CSE209代做.代写Computer Graphics.代做CS/python编程设计代写Python程序|代做ProcessingCSE209 Computer Graphics~1~CSE209 ...

最新文章

  1. Docverter – 文本文件轻松转换为 PDF,Docx 和 ePub 文件
  2. 数据访问增删改查之单项查询
  3. 亚马逊云服务开通指南_亚马逊弹性容器服务初学者指南
  4. android中影藏状态栏和标题栏的几种方法
  5. 【问题】Nginx日志中request_body为空
  6. centos7下yum安装mysql
  7. ADMT3.1快速迁移域用户账户和组[为企业维护windows server 2008系列十四]
  8. Java - 填充Word文本域、Word转PDF操作
  9. Python 根据图片url,批量下载图片
  10. 中龙电力什么理财产品预期收益高又安全?介绍四类理财产品
  11. element-ui的el-table更改筛选值filtered-value后不起作用
  12. magento-onestep-checkout-remove-payment-method-step
  13. 计算机应用研究是北大核心吗,计算机应用研究 CSCD核心期刊北大核心期刊统计源期刊...
  14. 手脫 -- PECompact 2.x -gt; Jeremy Collake
  15. 如何免费低价获取一切资源?
  16. 山东大学2021操作系统期末
  17. MCP2515 CAN芯片调试说明
  18. 三菱FX3U底层源代码 支持2路脉冲输出 支持脉冲输出和定位指令
  19. 10 Loaders加载模型到Three.js
  20. 运动耳机哪家强?运动耳机排行榜有你想买的品牌吗?

热门文章

  1. (每天一句python)两个list的交集、并集、差集
  2. Mybatis分页插件更新
  3. 免费Apk盈利之路:嵌入AdMob广告
  4. 调试css的新装备--IETester
  5. Android WiFi热点完全研究(自定义创建、跳转系统界面设置、读取配置、切换,Android6.0适配)...
  6. Django 应用开发(2)
  7. python学习笔记(装饰器、迭代器生成器、内置函数、软件目录开发规范)
  8. UIButton 按钮控件-IOS开发 (实例)
  9. 百度 php 图片文字识别,PHP实现百度OCR文字识别
  10. python可以自学吗需要什么基础-我是一个毫无基础的菜鸟,想自学Python,该怎么入手?...