对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的。

  可以采用生成器推导式来解决内存不足的问题。例如,利用生成器推导式创建一个生成器n,数据为1~33数字,可以写成n = (i for i in range(1, 34))。这样当程序需要一个数时,程序才生成数据,可以节省内存。然而生成器推导式太过简单,只能用一行代码的形式实现,如果要创建复杂的生成器,如创建一个生成器f,生成前10个斐波那契数字,生成器推导式已经不能满足需求了,因为斐波那契数列最开始的两个数都无法赋值。

  函数可以实现复杂的功能,然而要节省内存,就需要使用生成器函数。生成器函数与普通函数的区别是函数中包含关键字yield。实际上只要含有yield关键字的函数就是生成器函数。

  生成器函数是用函数实现生成器。定义生成器函数的语法格式如下:

  

  def 函数名(参数):

  函数体

  yield 变量名

  函数体

  由语法格式可知,生成器函数与普通函数的区别在于函数体部分,生成器函数的函数体含有“yield 变量名”语句。yield的功能类似于return,return是函数返回值,yield的功能也是返回变量,但是它仅返回变量而不退出函数,因此,yield可以看作是多次返回变量且不会退出函数的return。

  在调用生成器函数时,写上函数名与参数,并通过一个变量接收返回值,语法格式如下:

  变量名 = 函数名(参数)

  调用生成器函数的yield生成值的第一种方法如下:

  next(变量名)

  第二种方法如下:

  变量名.__next__()

  在掌握了生成器函数的定义和调用之后,就可以使用生成器函数实现生成前10个斐波那契数字的案例了。这个案例主要分为三步,第一步是定义生成器函数,第二步是调用并赋值,第三步是打印结果,代码如下:

  在上述程序中,首先定义生成器函数fib(),函数内先定义斐波那契数列的两个初始值,再写一个while True死循环。这个死循环有些特别,先是用yield生成待使用的数字,再通过赋值语句“a, b = b, a+b”将b的值赋给a,将a+b的值赋给b,每次循环都是如此。

  然后调用生成器函数fib(),再调用生成器函数的yield生成值,最后打印结果。由于需要生成前10个斐波那契数字,因此可以采用for循环,每循环一次生成并打印一个斐波那契数字,共循环10次。

  第一次循环时,调用yield生成值a,即1;第二次循环时,调用yield生成值a,a被赋值成b的值,即1,而b被赋值成a+b的值,即2;第三次循环时,调用yield生成值a,a被赋值成b的值,而此时b的值是上次赋值的a+b的值,即2……以此类推,就得到了整个斐波那契数列。

【免责声明:本文图片及文字信息均由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除。】

【Python培训基础知识】Python生成器函数相关推荐

  1. python:基础知识—流程控制—函数与模块—数据结构—类与GUI和Turtle—异常处理与文件,概括全书(上万字最详细版)

    这里是一张夜景,给大家放松一下. !!无锡南长街 文章目录 模块一:基础知识 1.python语言 2.常见数字类型 3.字符串 4.数字类型转换 5.标识符命名 6.常见关键字 7.运算符与表达式 ...

  2. 【Python培训基础知识】单例模式

    单例模式是保证一个类仅有一个实例的设计模式.Windows中的任务管理器就是一个典型的单例模式软件.Windows任务管理器如图所示. Windows任务管理器只能打开一个,即使用户重复打开,也只能获 ...

  3. python语法基础知识-python基础知识---简单语法

    1.if语句 a = 10 b = 20 if(a>b): print("a max!") else: print("b max!") b max! st ...

  4. python语法基础知识-python基础必学的语法知识

    python解释器在运行这些代码的时候,它会从上往下执行,遇到第一个for循环,它会先找到第一个for循环下面有缩进的代码先执行,接着执行结束了,才找第二个for循环下面的代码执行. 缩进表达程序的格 ...

  5. python的基础知识可以应用到哪方面-Python基础知识

    python基础 python的诞生 2002年,python 2.x 2008年,python 3.x python的命名 马戏团的名称 python简介 简单.易学 持快速开发. 跨平台. 开源. ...

  6. Python数据分析与可视化(基础知识)Python基础

    Python基础 本文首先介绍一下做数据分析与可视化所必备的Python基础,涉及Python的组合数据类型.控制流以及常用的内置函数. 数据类型 我们将讨论数据处理常见的数据类型. Python中的 ...

  7. python前端基础知识总结 及部分练习题

    python前端基础知识总结 知识总结 认识Python 发展历史 版本选择 python2.7是python2的最后一个版本,到2020年将不再维护 python3.6是python3最新的版本,是 ...

  8. Python培训基础教程都教哪些

    根据相关数据统计,目前学习Python技术的同学大多数是零基础,都是从其他行业转型来学习的,那么Python培训基础教程都教哪些呢?好不好学呢?来看看下面的详细介绍. Python培训基础教程都教哪些 ...

  9. Python培训教程之Python基础知识点梳理

    Python语言是入门IT行业比较快速且简单的一门编程语言,学习Python语言不仅有着非常大的发展空间,还可以有一个非常好的工作,下面小编就来给大家分享一篇Python培训教程之Python基础知识 ...

最新文章

  1. 后端码农谈前端(CSS篇)第一课:CSS概述
  2. 网络游戏性能测试的几点想法
  3. 数据不够,是模型表现不佳的“借口”,还是真正的问题所在?
  4. Vue开发跨端应用(一)环境搭建
  5. (转)---再说卷积
  6. 从老赖们“维权”,看拍拍贷的底色
  7. CVPR 2019 | INIT:针对实例级的图像翻译
  8. [xsd学习]xsd介绍
  9. python——进程基础
  10. 客户端访问Web Service--参数类型的序列化与反序列化(一)
  11. apache 建立用户认证
  12. oracle迁移至ASM磁盘
  13. UILabel根据内容自动调整高度
  14. 3.关于运动控制芯片
  15. 小学教师计算机培训记录内容,中小学教师信息技术培训计划
  16. sql连接查询语句中on、where筛选的区别总结
  17. linux7 镜像文件,{红帽 RHCE}RHEL7使用ISO镜像文件构筑本地YUM
  18. 05JavaScript输出
  19. java实现登录注册界面
  20. android屏幕亮度自动调节解析,基于人体视觉特性的Android手机屏幕亮度自适应调节算法研究...

热门文章

  1. 16.1、python初识面向对象(1)
  2. 【vivado】debug hub时钟不匹配
  3. 41-高级路由:BGP AS长度:接收一切、最大AS长度、不比较AS长度
  4. Visual C++ 2012/2013的内存溢出检測工具
  5. [转]大三下,我们该做什么?一篇被转万次的日志,你值得一看
  6. C#中使用Monitor类、Lock和Mutex类来同步多线程的执行(转)
  7. 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA
  8. android-sdk-windows版本号下载
  9. 雨季来临 对车辆涉水说“NO”
  10. do{ ...}while(0)应用技巧