一、生成器的由来


列表和列表生成器都无法解决内存受限的问题,列表中的所有数据都保存在内存中,以至于列表中的元素的太多了,当列表中的元素超过超过几十万甚至几百万,大量数据占用电脑内存,从而导致内存溢出,不利于我们后面的编程,所以要引用生成器

二、生成器定义

生成器是python中的一个对象(按照某种规律,来生成元素的对象),生成器不是列表,保存了产生元素的算法,同时会记录游标的位置(现在拿到第几个元素了),为了下次继续拿数据,而不是从头开始拿数据。可以通过一直调用next()方法获取值,这个对象不保存数据,每次调用会返回一个值,即做到了列表的好处,又不占用空间。

三、创建生成器

第一种方法:通过列表生成式来创建

generator:表示生成器
第二种方法:通过函数创建生成器(yield)
1、例如创建有限的斐波拉且数列

yield一般用于创建生成器,作用:返回后面变量(b)给生成器,而不是返回给函数的,b就是斐波拉且数列中的一个元素

只要在函数中有yield关键字,那么当前这个函数是属于生成器中保存的算法,算法实现的功能就是生成b

不会打印done
2、例如创建无限的斐波拉且数列,不能用for循环

注意:yield:是没有返回值的,如果赋值的话会打印None

输出结果为:

四、遍历生成器中的元素

第一种方法:
通过next(g),每调用一次next(),就会拿掉一个值(表达式中的第一个值),当已经遍历到生成器的结尾,会抛一个异常StopIteration。第4次调用next()的时候,生成器中已经没有数据了,继续调用会报错

第二种方法:
通过for循环遍历,for循环不会抛出异常

for循环的打印结果为:4,5,6,7,因为调用了一次next(g),游标已经往下走了,
第三种方法
object内置的__next__,当已经遍历到生成器的结尾,会抛一个异常StopIteration

第四种方法
send函数:但是生成器的第一个值必须使用send(None),后面的值就没有限制了

python——生成器详解相关推荐

  1. Python生成器详解(自定义的迭代器)

    文章目录 一 .生成器与yield 二. yield表达式应用 三. 三元表达式.列表生成式.生成器表达式 3.1 三元表达式 3.2 列表生成式 3.3 字典生成式 3.4 集合生成式 3.5 生成 ...

  2. Python 生成器详解

    1. 生成器定义 在Python中,一边循环一边计算的机制,称为生成器:generator. 2. 为什么要有生成器 列表所有数据都在内存中,如果有海量数据的话将会非常耗内存. 如:仅仅需要访问前面几 ...

  3. Python yield 详解(嚼碎了喂你,一篇精通,无需再看其他文章)

    Python yield详解 文章目录 Python yield详解 由"斐波那契"深入理解yield案例 第一个版本 第二个版本 问题的引出 第三个版本 第四个版本 总结 细化总 ...

  4. Python|SQL详解之DDL|DML|DQL|DCL|索引|视图、函数和过程|JSON类型|窗口函数|接入MySQL|清屏|正则表达式|executemany|语言基础50课:学习(14)

    文章目录 系列目录 原项目地址 第41课:SQL详解之DDL 建库建表 删除表和修改表 第42课:SQL详解之DML insert操作 delete 操作 update 操作 完整的数据 第43课:S ...

  5. python区块链开发_Fabric区块链Python开发详解

    Hyperledger Fabric是最流行的联盟区块链平台.Fabric区块链Python开发详解课程 涵盖Fabric区块链的核心概念.Fabric网络搭建.Node链码开发.Python应用开发 ...

  6. python装饰器setter_第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter...

    上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一.    案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...

  7. 【python】详解类class的继承、__init__初始化、super方法

    原文链接; https://blog.csdn.net/brucewong0516/article/details/79121179?utm_medium=distribute.pc_relevant ...

  8. python与golang_Golang与python线程详解及简单实例

    Golang与python线程详解及简单实例 在GO中,开启15个线程,每个线程把全局变量遍历增加100000次,因此预测结果是 15*100000=1500000. var sum int var ...

  9. python 最小二乘法_最小二乘法及其python实现详解

    最小二乘法Least Square Method,做为分类回归算法的基础,有着悠久的历史(由马里·勒让德于1806年提出).它通过最小化误差的平方和寻找数据的最佳函数匹配.利用最小二乘法可以简便地求得 ...

最新文章

  1. php 表单处理,用PHP提交from表单的处理方法
  2. Java基础知识回顾-6
  3. mac OS Sierra支持破解程序
  4. 数字证书应用综合揭秘(包括证书生成、加密、解密、签名、验签)
  5. 错误: 程序包r2不存在_坚果 R2 使用体验:它是一款真旗舰,也是不一样的旗舰...
  6. python【蓝桥杯vip练习题库】ADV-69质因数(数论)
  7. wordpress外部调用到html_Spring 自调用事务失效,你是怎么解决的?
  8. 手工搭建APACHE服务
  9. 不变性真的意味着线程安全吗?
  10. AE学习笔记——第二章:AE图层中的图层用法及基本操作
  11. Netty工作笔记0056---Unpooled应用实例2
  12. 反转!物联网火爆,开发技术却遇瓶颈!
  13. 操作系统的概念,功能
  14. 如何用科研经费报销会务、餐饮、住宿费
  15. 计算机语言echo off什么意思,批处理文件的@echo off是什么意思?
  16. 亲测~Win10开启系统自带Wifi热点步骤
  17. 高德地图 Web JS API示例学习笔记(12)——Object3D 图形(通用接口、立体Mesh、线Line)
  18. 深入浅出 SSL/TLS 协议
  19. 今日头条秋招前端笔试附加题解题思路
  20. DDSM乳腺钼靶图像数据库——ftp下载与格式转换(LJPEG转PNG)

热门文章

  1. eta 深度学习 参数_深度学习中的参数梯度推导(一)
  2. 如何正确使用穿线管 穿线管布局解析
  3. 电气接线+线号管正确方向=电工接线好习惯!你有吗?
  4. jspider java运行_Web Spider 网络蜘蛛爬虫
  5. NLP之TEA:基于SnowNLP实现自然语言处理之对输入文本进行情感分析(分词→词性标注→拼音简繁转换→情感分析→测试)
  6. AI:基于计算机视觉和语音识别案例项目打包过程记录20181226-19
  7. Paper:《Hidden Technical Debt in Machine Learning Systems—机器学习系统中隐藏的技术债》翻译与解读
  8. DL之DNN优化技术:神经网络算法简介之GD/SGD算法的简介、代码实现、代码调参之详细攻略
  9. 构建乘积数组(剑指offer)
  10. 37.递推:Pell数列