python经济_python生成器——懒到欠揍,但很经济
生成器的特点是工作到一半,就会停下来看别人干活直至有人踢它屁股,这时它才继续往下干活。实现这一功能的精髓要用到yield。
生成器是一种特殊的迭代器,因此我们先来了解一下什么是迭代器。我们都知道著名的斐波那契数列:1、1、2、3、5、8、13、21、34……从第三个数开始,每个数都可以由其前面的两个数相加得到,这就是一个迭代过程。很显然,这是一个不收敛的数列,我们无法用列表或者使集合去一次性将它们提取出来。这时候,如果我们把这样一个迭代过程封装成一个迭代器,只有在调用一次它的时候它才进行一次迭代,并且只保留当前的迭代结果,这样一来,程序的运行速度能得到提高,同时也不会对内存造成严重的负担。迭代器可以表示一个无限大的数据流,也可以表示一个有限的数据流。
从代码的角度讲,所有可以被next()函数调用并不断返回下一个值的对象就叫做迭代器:Iterator。与迭代器相近的一个概念是可迭代对象(Iterable),凡是可用for循环遍历的对象都是可迭代对象,比如list、dict和str等。但是这几个对象不是迭代器,这一点在上一段已经从迭代器的特点说明,不再赘述。然而,世事无绝对,通过iter()函数,可以将它们变成迭代器。
由此,我们可以建立这样一个斐波那契数列生成器:
defgenerate():
b,c= 0,1
while True: #a用来计数
b,c= c,b +c #迭代公式
yieldcreturn "fault" #出错时的返回值
y= generate() #产生一个生成器对象,但不调用生成器
for i in range(15): #调用15次
print(y.__next__(),end=" ") #使用next()方法调用生成器
print("\r") #换行操作符
for i in range(9): #继续迭代
print(y.__next__(), end=" ")
yield的作用是让生成器在这里暂停执行,执行下一条程序指令。当下一次调用next()函数时,生成器从暂停的地方继续往下执行。一次,每调用一次产生一个值,如下图所示
这种类型的生成器并不需要参数,当我们需要给生成器内部传递参数时,我们需要用到send()函数,因为next()函数不具备该功能。看下面这样一段代码:
1 defsing(word1):2 print(word1)3 whileTrue:4 word2 = yield #每次调用时生成器都停留在这里
5 print(word2)6
7
8 a = sing("如今走过这世间")9 a.send(None) #可以替换成a.__next__()
10 a.send("万般流连")
上述代码,如果不用while循环,则没办法使每次调用的结果程序都停留在yield这里,而是执行完print(word2)变结束了,这使程序会报错。在第一次使用需要传递参数的生成器时,我们不能直接使用send()函数传递我们想传递的参数,因为此时函数停在yeild,并不需要到这个参数。因此我们可以用next()函数来进行第一次调用,然后再调用send()传递参数并调用。当然,如果我们非要用send()函数实现第一次调用时,应该传递一个空参数。运行结果如下所示:
至此,大功告成!
python经济_python生成器——懒到欠揍,但很经济相关推荐
- python生成器 图片分类_python批量处理图片图片Python迭代器和生成器介绍
Python迭代器和生成器介绍迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration ...
- python迭代器和生成器的作用_python迭代器与生成器的详细介绍
一.什么玩意是迭代器? 先说说什么是迭代吧,迭代就是一件事情重复很多次,比如说for循环. for循环可以对一切有iter方法的对象进行迭代,那么什么是iter方法呢? 一个对象是否可迭代,全都取决于 ...
- python 生成器 原理_python 生成器和迭代器的原理解析
一.生成器简介 在python中,生成器是根据某种算法边循环边计算的一种机制.主要就是用于操作大量数据的时候,一般我们会将操作的数据读入内存中处理,可以计算机的内存是比较宝贵的资源,我认为的当要处理的 ...
- python迭代器与生成器实际用途_python迭代器和生成器
python迭代器和生成器 一.迭代器 1.什么是迭代器 说迭代器之前有个相关的名词需要介绍: 可迭代对象:只要定义了iter()方法,我们就说该对象是可迭代对象,并且可迭代对象能提供迭代器. 在Py ...
- python编程语言_python编程语言的简要历史
python编程语言 The Python programming language is a general-purpose programming language that has carved ...
- python基础(迭代器,生成器,装饰器)
python: 生成器: 因为当列表元素达到一定上限,列表会占很大内存空间来存储,所以列表是受到内存限制的来适当使用. 生成器可以按照一个算法,循环推导出元素,就不用一次生成整个列表,而通过生成器(g ...
- 简单介绍python迭代器和生成器
这篇文章主要介绍了Python中的迭代器和生成器,涉及到Python中很多重要的特性,需要的朋友可以参考下,希望能够给你带来帮助 python迭代器和生成器 1.迭代器 这里用字典示例 while T ...
- python画代码-Python教程_Python画Mandelbrot集 代码
Python教程_Python画Mandelbrot集 代码 作者:Comet 来源: 课课家 www.kokojia.com点击数:278发布时间:2015-06-19 11:17:19 曼德勃罗集 ...
- python编程有什么用处-python中的生成器是什么?生成器有什么用处?
在以下的文章之中我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. python生成器是什么? 通过列表生成式,我们可以直 ...
最新文章
- VS不显示最近打开的项目
- 苹果裁撤自动驾驶项目员工200余人
- CYQ.Data V4系列全面开源(2013-08-04)
- 快速解决正则----模糊匹配、字符类、量词
- 固态硬盘坏块修复工具_哪些情况影响固态硬盘寿命 影响固态硬盘寿命症状【详解】...
- 基于Vue-SSR优化方案归纳总结
- 如何验证python的下载安装_如何下载python并正确安装
- windows下搭建iphone开发环境
- 用matlab绘制中国海岸线,matlab显示全球海岸线
- oracle中长字符串长度吗,Oracle 字符串长度函数
- c语言数组插入一个数字 移位,如何将一个数组的元素循环左移?
- 操作系统实战45讲01:运行HelloOS
- PHP 5.4.8 添加系统服务命令
- Python 的几种推导式
- uniapp手写地图搜索选取功能
- Java内存模型基础知识
- 完美解决MATLAB建立新文件没有权限问题
- java使用memcached
- 对12306车票数据的提取
- 什么是真正的架构设计?十年Java经验让我总结出了这些,不愧是我
热门文章
- kindeditor和easyui整合出不来
- 8 线程安全且高效的单例模式
- iOS开发 autoResizingMask使用
- cut命令详解(转)
- 计算机网络——分层结构,协议,接口和服务
- python安装百度aip_Python3.6安装aip
- java2019 数据结构算法面试题_2019年JVM最新面试题,必须收藏它
- python操作csv文件第7行开始的数据_Python教程-Python读写CSV文件
- python计算入门_Python入门教程02-01(计算机核心基础)
- python变量类型之间转换_Python常用数据类型之间的转换总结