生成器(generator)理解
生成器(generator)
1、什么是生成器?
生成器仅仅保存了一套生成数值的算法,并且没有让这个算法现在就开始执行,而是我什么时候调它,它什么时候开始计算一个新的值,并给你返回。
2、为什么要用生成器?
列表所有数据都在内存中,如果有海量数据的话将会非常耗内存。
如:仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
如果列表元素按照某种算法推算出来,那我们就可以在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间。
简单一句话:我又想要得到庞大的数据,又想让它占用空间少,那就用生成器
3、如何创建生成器?
第一种方法很简单,只要把一个列表生成式的[ ]改成( ),就创建了一个生成器(generator):
创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个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
<generator object <genexpr> at 0x1022ef630>
方法二, 如果一个函数中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。调用函数就是创建了一个生成器(generator)对象。
4、生成器的工作原理:
(1)生成器(generator)能够迭代的关键是它有一个next()方法,
工作原理就是通过重复调用next()方法,直到捕获一个异常。
(2)带有 yield 的函数不再是一个普通函数,而是一个生成器generator。
可用next()调用生成器对象来取值。next 两种方式 t.next() | next(t)。
可用for 循环获取返回值(每执行一次,取生成器里面一个值)
(基本上不会用next()来获取下一个返回值,而是直接使用for循环来迭代)。
(3)yield相当于 return 返回一个值,并且记住这个返回的位置,下次迭代时,代码从yield的下一条语句开始执行。
(4).send() 和next()一样,都能让生成器继续往下走一步(下次遇到yield停),但send()能传一个值,这个值作为yield表达式整体的结果
——换句话说,就是send可以强行修改上一个yield表达式值。比如函数中有一个yield赋值,a = yield 5,第一次迭代到这里会返回5,a还没有赋值。第二次迭代时,使用.send(10),那么,就是强行修改yield 5表达式的值为10,本来是5的,那么a=10
5、理解的关键在于:下次迭代时,代码从yield的下一条语句开始执行。
生成器(generator)理解相关推荐
- php generator 风雪,PHP 生成器Generator理解
这篇文章介绍的内容是关于PHP 生成器Generator理解,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 转载整理自:寄凡.风雪之隅.PHP手册 生成器(Generator)可解决的 ...
- python之路day14--列表生成式、生成器generator、生成器并行
列表生成式 列表生成式阅读量: 44 现在有个需求,现有列表a=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 二逼青年版 ...
- Python组合数据类型:容器类型总览,(不)可变数据类型immutable、(不)可迭代对象iterable、迭代器iterator、生成器generator、语法糖
一.组合数据类型container objects 组合数据类型container objects:能够表示多个数据的类型 集合类型:集合类型是一个元素集合,元素无序不重不变 序列类型:序列类型是一个 ...
- ES6中的迭代器(Iterator)和生成器(Generator)
用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简化数据操作 ...
- 深入解析ES6中的迭代器(Iterator)和生成器(Generator)
用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简化数据操作 ...
- JavaScript的Generator理解使用
Generator理解 Generator 函数是 ES6 提供的一种异步编程解决方案,可以这么理解: 从语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态. 执行 ...
- 生成器generator
生成器generator 定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器 代码: def cash_out(a ...
- python3.x中的生成器generator调用next方法
python3.x中的生成器generator调用next方法 标签: 编辑 删除 今天写了一段Python程序,用到了Python的generator.当我用到generator的next方法时,s ...
- python生成斐波那契_python学习-生成器(generator)及斐波那契;yield
生成器(generator):生成器不同于列表,是根据某一种算法来推算,在循环过程中不断计算出后续的元素,从而节省大量空间. generator的创建方式有很多种. 第一种和列表创建方式相类似,只要将 ...
- python生成器函数(generator),python3学习笔记:生成器generator
简单了解下生成器generator,主要是yield的返回值和send的传参,记录下. 生成器的基本属性 generator = 函数 + yield 简单说,就是一个函数,里面用到了关键字yield ...
最新文章
- 预测 motif 的计算原理
- 21张GIF动图让你秒懂数学原理
- linux tcp客户端端口号,Linux网络编程--服务器客户端(TCP实现)
- Netty工作笔记0049---阶段内容梳理
- 怎么查看页面跳转过程_faststone注册码怎么获取?英文官网打不开
- 【图像配准】基于灰度的模板匹配算法(一):MAD、SAD、SSD、MSD、NCC、SSDA、SATD算法...
- 计算机二级试题aoa,浙江省高校计算机二级AOA考试excel试题及解析
- 基于Neo4j计算网络节点中心性(Closeness、betweenness Centrality)
- 第2章——R的数据组织
- OCCT示例学习笔记1--Viewer2d项目
- fbp是什么岗位_BP是什么职位?
- 营销大师马斯克又发话了:芯片短缺不要怕,明年有望可解决
- 自定义照相机官方指南
- 谷歌play支付_Google Play的新功能
- littlefs系列:重要的数据结构
- 空值的约束条件之unique约束
- 小程序生成二维码 发布版本无法显示 测试和体验版正常
- 网络基本操作计算机网络实验,实验一 计算机网络基本操作
- Python爬虫日记-解释def __init__(self, *args, **kwargs)
- 伪类选择器:checked
热门文章
- 解读随着教育改革的深入steam教育
- java 卫星轨道6根数实现轨道预测
- MyBatis在字段返回为null不返回字段
- 7大Python IDE工具推荐
- Flume之HDFS Sink 的参数解析及异常处理
- 微软亚洲研究院2017年笔试编程题
- 华裔计算机科学家晟,微软亚洲研究院发表了超过5000篇科研论文:晟最受赞许的企业研究院...
- 一文了解新一代信息技术
- openlayers中海图的加载
- (2020.11)OAI搭建eNB without S1 usrpx310 (usrp2944)