Python–生成器

学习生成器之前,首先需要认识列表生成式,直奔主题。

1、简单列表生成式示例:

看样子好像很NB的样子,其实它等价于:

其实还是有点NB的,毕竟代码少了,手动嘻嘻嘻!

2、削微高级点的列表生成式:

生成式生成的数据可以交给函数处理,进而得到预定规则的一组数据。

下面有请主角登场!!!!

生成器:在Python中,一边循环一边计算的机制,称为生成器:generator。

我们知道了,通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。

创建生成器的姿势:将生成式的”[]”换成”()”就ok了,是不是超级简单。。。

由上面的例子可见,打印的a已不是一个列表,而是a的内存地址。而且a可以通过for循环将其中的值取出。

就用一个小栗子完成生成式和生成器比较吧:

生成器特性:

1.生成器只能一个个的取数据2.生成器只有在调用时才会生成相应的数据3.生成器只记住当前位置的地址,之前的的内存地址都没了4.只有一个__next__()方法5.生成器不能根据索引位置取值

示例:了解斐波那契数列(下个数为前两个数的和)

使斐波那契数列变成一个生成器

使用yield后,可以使用__next__()方法,中断函数的执行,在中断之后可以执行其他的操作,然后还可以通过__next__()再进入例如:

能看到这,那你又又又又又又要学到了:抓异常、抓异常、抓异常。重要的事情说三遍!!!

生成器示例高级,实现并行:

END!!!

Original: https://www.cnblogs.com/sunnytomorrow/p/13081734.html
Author: NorthFeng
Title: Python–生成器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/590723/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 如何使用原生的Ribbon

    什么是Ribbon 之前分析了如何使用原生的Feign,今天我们来研究 Netflix 团队开发的另外一个类库–Ribbon。Ribbon 和 Feign 有很多相似的…

    数据库 2023年6月6日
    084
  • 两表关联更新、删除-七星海棠

    两表关联更新 通用方法 update test1 set name=(select name from test2 where test2.id=test1.id), age=(s…

    数据库 2023年6月11日
    078
  • Eureka详解系列(四)–Eureka Client部分的源码和配置

    按照原定的计划,我将分三个部分来分析 Eureka 的源码: 今天,我们来研究第二部分的源码。 我的思路是这样子的:先明确 Eureka Client 拥有哪些功能,然后从源码角度…

    数据库 2023年6月6日
    078
  • Java 线程创建与常用方法

    进程与线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、…

    数据库 2023年6月16日
    060
  • Arrays.asList()你真的知道怎么用吗?

    发现问题 前几天在看别人的项目的时候,发现一个问题,简单复现一下这个问题 // 注意这是一个Integer对象的数组哦 Integer[] arr = new Integer[]{…

    数据库 2023年6月11日
    064
  • 三分钟入门 InnoDB 存储引擎中的表锁和行锁

    各位对 “锁” 这个概念应该都不是很陌生吧,Java 语言中就提供了两种锁:内置的 synchronized 锁和 Lock 接口,使用锁的目的就是管理对共…

    数据库 2023年6月6日
    080
  • MYSQL的Java操作器——JDBC

    在学习了Mysql之后,我们就要把Mysql和我们之前所学习的Java所结合起来 而JDBC就是这样一种工具:帮助我们使用Java语言来操作Mysql数据库 JDBC简介 首先我们…

    数据库 2023年6月14日
    068
  • phpstrom以及webstrom等jetbrains全家桶激活方法

    因为最近重新安装了phpstrom,所以在网上找了许多激活方式,各种激活码和加公众号都试过了,没有一个能用的,直到我找到了以下的方式,亲测可用: 原理是我们通过代码搜索其他授权服务…

    数据库 2023年6月14日
    0139
  • Linux

    1、关机命令 命令 说明 sync 将数据由内存同步到硬盘中 shutdown 关机 shutdown -h 10 10分钟后关机 shutdown -h now 立马关机 shu…

    数据库 2023年6月16日
    099
  • Linux中MySQL的安装以及卸载

    一.MySQL MySQL 是一种开放源代码的关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收…

    数据库 2023年5月24日
    0101
  • Mysql索引总结

    一、索引分类 Hash索引:Hash 索引查询效率很高,时间复杂度O(1)。Mysql Innodb引擎不支持hash索引的。Hash索引适合精确查找,不适合范围查找。 平衡二叉树…

    数据库 2023年5月24日
    058
  • Golang context

    Context Go 语言中提供了 context 包,通过显示传递 context, 实现请求级别的元数据、取消信号、终止信号的传递。context 包提供了从现有的上下文值(c…

    数据库 2023年6月16日
    078
  • 用Python做一个中秋抢购月饼的脚本

    ; 序言 每逢佳节倍思亲,想买个东西给家里,结果发现手速不够,网速不够快,没有时间下单等等各种原因导致最后想买的东西售罄了… 甚至跟你一起抢购的可能是脚本,太真实了! …

    数据库 2023年6月14日
    092
  • MariaDB主从备份

    MariaDB主从备份 修改my.ini的参数 注释第30行左右的bind-address bind-address=127.0.0.1 注释61行左右的log-bin=mysql…

    数据库 2023年6月9日
    057
  • 19-TCP、UDP的区别和应用场景

    可靠性TCP 提供交付保证,这意味着一个使用TCP协议发送的消息是保证交付给客户端的,如果消息在传输过程中丢失,那么它将重发。UDP是不可靠的,它不提供任何交付的保证,一个数据包在…

    数据库 2023年6月16日
    089
  • Qingcloud_MySQL Plus(Xenon) 高可用搭建实验

    实验:Xenon on 5.7.30 Xenon (MySQL Plus) 是青云Qingcloud的一个开源项目,号称金融级别强一致性的高可用解决方案,项目地址为 https:/…

    数据库 2023年6月16日
    0113
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球