当前位置: 首页 > 编程日记 > 正文

【Python培训基础知识】Python生成器函数

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

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

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

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

1

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……以此类推,就得到了整个斐波那契数列。

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

相关文章:

普华永道重磅报告:决定未来的八大核心科技

在新兴科技高速发展的今天,各个技术风口你方唱罢我登场,把我们裹挟其中,无论是创业者,还是大公司的决策人,都需要时刻判断趋势。 也许每个人心里都在想类似的问题:“这些人工智能技术会如何影响我们的物联网…

[转帖][实用]Linux 释放内存方法

先看看内存使用状况[rootnode1 ~]# free -mtotal used free shared buffers cachedMem: 8004 6557 1446 0 163 5630-/ buffers/cache: 763 7240Swap: 1983 0 1983把内存里的数据暂时写到硬盘里[rootnode1 ~]# sync修改 /proc/sys/vm/drop_caches文件[rootnode1 ~]# echo 3 >…

股市币市:数据分析与交易所公告(20190227)

沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: https…

【Web前端培训】预解析(变量提升)

今天千锋小编为大家介绍一下一下JavaScript中的预解析(变量提升)。从什么是预解析及变量的预解析和函数的预解析及加载流程进行学习(注意:我们这里说的ES5中的预解析)。 什么是解析 首先代码执行肯定需要一个执行环境,浏览器会提供一个供javaScript执行的…

如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!

我们生活在一个快节奏的时代里,每天除了辛苦的提升自己,为生活打拼之外,偶尔的放松去看场电影也是必要的。可是能够抽出的时间有限,选择看哪部电影就是一个挠头的问题了。 幸好,有类似猫眼电影、豆瓣电影、淘票票这样…

【Java学习笔记之五】java数组详解

数组 概念 同一种类型数据的集合。其实数组就是一个容器。 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素。 格式1: 元素类型[] 数组名 new 元素类型[元素个数或数组长度]; 示例:int[] arr new int[5]; 格式2&…

参加Java培训需要注意什么

java编程语言对于零基础的同学来说,想要自学是非常困难的,因为java学习包含很多阶段,所以零基础的小白和初学者报java培训班学习是非常有必要的,下面小编就给大家详细的介绍一下参加Java培训需要注意什么? 参加Java培训需要注意什…

写得不错的几篇C/C++博客

转:http://blog.csdn.net/rubyzhudragon/category/562309.aspx 转载于:https://www.cnblogs.com/xinzhuangzi/archive/2010/08/22/4100543.html

股市币市:数据分析与交易所最新公告(20190228)

沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: https…

优化webpack配置

happypack happypack可以加快rebuild的速度 在开发的时候,需要将babel-loader替换成happypack/loader{test: /\.(js|jsx)$/,exclude: /(node_modules|vendor)/,loader: isDev ? happypack/loader : babel-loader } 同时添加插件, 根据需要定义不同的babel配置&…

Java多线程学习处理高并发问题

在程序的应用程序中,用户或请求的数量达到一定数量,并且无法避免并发请求.由于对接口的每次调用都必须在返回时终止,因此,如果接口的业务相对复杂,则可能会有多个用户.调用接口时,该用户将冻结. 以下内容将…

防止表单多次提交

防止表单多次提交 //jQuery①<script type"text/javascript"> $("input:submit").each(function() { var srcclick $(this).attr("onclick"); if(typeof(srcclick)"function"){ $(this).click(function() { if (srcclick()) { …

Visual Studio环境变量使用实例:使用环境变量来组织project

前言 在前一篇文章Visual Studio中的环境变量(以Visual Studio 2013为例)中介绍了VS中的环境变量&#xff0c;本文将以实际样例说明怎样合理使用这些环境变量来组织VCproject。使用vs环境变量来组织project 通常一个解决方式包括多个项目。这些项目相互之间可能存在依赖关系。以…

股市币市:数据分析与交易所最新公告(20190301)

沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源&#xff1a; https://finance.sina.com.cn/stock/ BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源&#xff1a; https…

Python常用6个技术网站汇总分享!

Python是一门面向对象的编程语言&#xff0c;它具有丰富和强大的库&#xff0c;能够把用其他语言编写的各种模块轻松地联结在一起&#xff0c;因此也常被称为“胶水语言”。Python技术会随着互联网的不断发展一直迭代和更新&#xff0c;所以需要Python开发的人员一直保持一个学…

devstack —— 单机部署 OpenStack 体验

2019独角兽企业重金招聘Python工程师标准>>> devstack 是一个用来快速部署 OpenStack 的脚本。 使用非常简单&#xff0c;执行 ./stack.sh 即可&#xff0c;但是在安装过程中遇到一些问题会中断&#xff0c;通过不断修正尝试&#xff0c;事后在这里记录一下&#xf…

使用ultraedit和cl编译器打造简易c/c++开发环境

在visual c下&#xff0c;每编写一个简单的小程序&#xff0c;就得生成一大串中间文件&#xff0c;另人十分的不爽。下面提供一个新的编写c/c程序的方法&#xff1a;   &#xff08;1&#xff09;&#xff0c;下载utraledit-32编辑器&#xff0c;推荐v11.  &#xff08;2&a…

股市币市:数据分析与交易所最新公告(20190302)

BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源&#xff1a; https://coinmarketcap.com/currencies/bitcoin/ 数字货币交易所公告 BigOne 2019/03/01 BigONE 用户体验月&#xff1a;有奖寻建议 &#xff0c;重金找 BUG …

分享五款java学习辅助工具,总有你用的上的~

想要学好java技术&#xff0c;除了自身的努力&#xff0c;辅助工具也不缺少&#xff0c;辅助工具可以帮助大家在今后的工作中可以提高工作效率&#xff0c;下面小编就来分享五款java学习辅助工具&#xff0c;总有你用的上的~ 五款java学习辅助工具&#xff1a; 1、Eclipse Ecli…

如何利用 C# 爬取「猫眼电影专业版:票房」数据!

在现代生活中&#xff0c;看电影已经成为大家的一种休闲方式。 前几天&#xff0c;我们介绍了 如何利用 C# 爬取「猫眼电影&#xff1a;热映口碑榜」及对应影片信息&#xff01;&#xff0c;通过这份“热映口碑”榜单&#xff0c;我们可以看到大家对当前热播电影的评价&#x…

MOSS的CSS样式说明,一个老外总结的

MOSS的CSS样式说明&#xff0c;一个老外总结的 http://www.heathersolomon.com/content/sp07cssreference.htm 转载于:https://www.cnblogs.com/greeny/archive/2010/09/03/1817027.html

什么是整型?Python整型详细介绍

整数类型(int)简称整型&#xff0c;它用于表示整数&#xff0c;例如&#xff0c;100、2016等。整型字面值的表示方式有四种&#xff0c;分别是十进制、二进制(以“0B”或“0b”开头)、八进制(以数字“0”开头)和十六进制(以“0x”或“0X”开头)。 Python的整型可以表示的范围是…

hibernate.hbm2ddl.auto的value

Hibernate 配置参数hibernate.hbm2ddl.auto Hibernate中的配置文件&#xff1a; <properties> <property name"hibernate.hbm2ddl.auto" value"create" /> </properties> 参数说明&#xff1a; validate 加载hibernate时…

linux的管道

1 管道的本质是进程间通信的一种手段 这个命名是非常形象的&#xff0c;数据从管道的一端流向管道的另外一端&#xff0c;然后另外一个进程等在那里&#xff0c;只要有数据了就进行处理。 2 管道连接的多个命令是同时启动的 也就是说&#xff0c;管道连接的多个命令的进程之间是…

股市币市:数据分析与交易所最新公告(20190303)

BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源&#xff1a; https://coinmarketcap.com/currencies/bitcoin/ 产品进程 赚钱是刚需&#xff0c;如何正确的交易股票&#xff1f;「股票数据分析软件」的开发&#xff08;上&…

零基础怎么学习web前端开发

零基础怎么学习web前端开发?web前端在移动互联网行业的运用是非常广泛的&#xff0c;而且web前端开发技术所涵盖的知识有很多&#xff0c;具体要怎么学习&#xff0c;来看看小编下面的详细介绍吧。 零基础怎么学习web前端开发?对零基础学员来说&#xff0c; web前端要学习的知…

【DocFX文档翻译】DocFX 入门 (Getting Started with DocFX)

DocFX 入门 1. DocFX 是什么&#xff1f; DocFX 是一个基于.NET的API文档生成器&#xff0c;当前支持 C# 和 VB。 它可以通过你的代码中的三斜杠注释生成 API 参考文档。同样也支持你使用 Markdown 文件创建一些其他的主题文档&#xff08;例如&#xff1a;教程以及使用手册&am…

在Ubuntu上安装Snort入侵检测系统。

转载于:https://www.cnblogs.com/onlyzq/archive/2010/09/10/1823079.html

一份来自山东院校的考研调剂系统已开放名单!

距离 19 考研初试成绩的公布已经有一段时间了&#xff0c;成绩不错的同学就安心准备复试吧&#xff0c;全力备考&#xff0c;一定要拿到属于你的录取通知书&#xff01;成绩不满意&#xff0c;擦线或者排名靠后的同学&#xff0c;复试、调剂两手准备&#xff0c;注定咱们要花更…

适合初学者学java技术的书籍推荐!

想要学会java技术&#xff0c;光靠听课是不够的&#xff0c;看书也是非常重要的一步&#xff0c;以下小编为大家推荐的是适合初学者学java技术的书籍&#xff0c;希望能够给初学者们带来帮助。 适合初学者学java技术的书籍推荐! 1. Java编程思想(第4版) 本书赢得了全球程序员的…