什么是生成器?如何创建生成器?今天番茄加速就来讲一下。

生成器是可迭代的(Iterable),最简单的创建生成器方法是通过一对(),如下所示:

In [37]: g = (i*i for i in [1,4,0])

In [38]: g

Out[38]: at 0x7fe8956e96d0>

g 是一个生成器对象,generator object

获取生成器对象的元素,可使用next函数,如下所示,获取第一个元素:

In [39]: next(g)

Out[39]: 1

获取第二个元素:

In [40]: next(g)

Out[40]: 16

创建生成器的几种方法?

如上所见,使用一对()能够创建一个生成器对象。

除此之外,想必大家也都知道,是使用关键字 yield. yield出现在一个函数中,运行到yield处,返回的对象便是生成器对象(generator object).

生成器是迭代器吗?

生成器对象(generator object)一定也是迭代器对象(Iterator object),如上面的生成器g,使用内置函数isinstance验证,返回True:

In [43]: isinstance(g,Iterator)

Out[43]: True

因此,它具备一切迭代器的特性,关于迭代器我们已在上一个话题讨论,简而言之,迭代器的几个特点:

是有去无回的,

迭代器无需提前知道整个列表的所有元素,

无需加载所有元素到RAM中尽而它是节省内存的(memory-efficient).

生成器同样具备这些特性。

什么是生成器?如何创建生成器相关推荐

  1. mysql 生成数列_PHP生成器的创建和使用

    1.概述 生成器是 PHP 5.5 引入的新特性,但是目测很少人用到它,其实这是个非常有用的功能. 生成器和迭代器有点类似,但是与标准的PHP迭代器不同,PHP生成器不要求类实现Iterator接口, ...

  2. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

  3. 异步生成器_使用生成器实现异步并等待

    异步生成器 Nowadays we can write our asynchronous code in a synchronous way thanks to the async and await ...

  4. 详解Python生成器函数和生成器对象的原理和用法

    包含yield语句的函数可以用来创建生成器对象,这样的函数也称生成器函数.yield语句与return语句的作用相似,都是用来从函数中返回值.与return语句不同的是,return语句一旦执行会立刻 ...

  5. python生成器表达式_python 生成器和生成器表达式

    1.生成器 生成器的本质就是迭代器 生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(),send():给上一个yield传值) 生成器一般由生成器函数或者生成器表达式来创建 其实就是 ...

  6. Day13 推导式、推导式试题、集合推导式、生成器函数、生成器表达式

    1.推导式 通过一行循环判断,遍历出一系列数据的方式就是推导式特点:方便,简介,可以实现一些简单的功能推导式当中只能跟循环和判断(单项分支)种类中分为三种: 列表推导式,集合推导式,字典推导式 [va ...

  7. php. 生成器 send,PHP生成器细说

    之前写过关于生成器的文章,可能还不够详细,正好群里有朋友在讨论.觉得还是有必要再细说下,如果大家做过Python或者其他语言的,对于生成器应该不陌生.生成器是PHP 5.5.才引入的功能,也许大家觉得 ...

  8. python 生成器 原理_python 生成器和迭代器的原理解析

    一.生成器简介 在python中,生成器是根据某种算法边循环边计算的一种机制.主要就是用于操作大量数据的时候,一般我们会将操作的数据读入内存中处理,可以计算机的内存是比较宝贵的资源,我认为的当要处理的 ...

  9. Python中的yield关键字及表达式、生成器、生成器迭代器、生成器表达式详解

    文章目录 1. yield关键字及表达式.生成器.生成器迭代器.生成器表达式 1.1 yield关键字及表达式(yield expression) 1.1.1 yield关键字 1.1.2 yield ...

最新文章

  1. Python 语法相关知识
  2. 你知道为什么Java的main方法必须是public static void?
  3. java enumeration 排序_Java如何对java.util.Enumeration进行排序?
  4. [转]那些相见恨晚的 JavaScript 技巧
  5. POJ 2492 A Bug's Life
  6. 转:linux中select()函数分析
  7. 解决Connectify和校园天翼宽带L2TP客户端的不兼容问题
  8. 集客家客运维那些事_全网独家汇总!通信工程原理、设备知识大全(2018)
  9. java 数字转大写_数字转大写(java)
  10. 数商云在线供应链系统服务方案:构建企业供应链平台业务、功能、技术管理架构
  11. 几种常见嵌入式实时操作系统简介
  12. 水滴模式能否解惑10亿人口下沉市场?
  13. CardView属性简介
  14. 用Ultraiso刻录U盘装系统
  15. 一个毕业两年IT民工
  16. 京东、知乎、天猫等各大平台的K8S架构你知道多少?
  17. Unity VFX学习系列 —— Operators 详细说明
  18. 笔记:3.5 《数据库系统概论》之基本表更新(INSERT、UPDATE、ALTER、DELETE)与视图VIEW(定义、查询、更新)
  19. html5 桌面定时提醒,C#定时提醒休息小工具源码(可自动显示桌面和动画)
  20. 复杂美区块链怎么样?复杂美区块链介绍

热门文章

  1. 服务器端身份证识别技术
  2. 遥感数据在植物识别的应用
  3. BUUCTF 每日打卡 2021-4-5
  4. 论坛mysql cpu100_解决 MYSQL CPU 占用 100% 的经验总结
  5. 初学者对PHP的总结,PHP_献给php初学者(入门学习经验谈),1.概要:学习任何语言都需要 - phpStudy...
  6. 全球与中国苯乙烯-异戊二烯嵌段共聚物市场现状及未来发展趋势
  7. 全站仪坐标计算机公式,全站仪测量时,坐标n,e,z如何对应于图形坐标x,y,z?...
  8. 考研大作文模板与实战(图表为主+部分图画新题型)
  9. IB1010音频解码芯片
  10. 谷歌pay服务端文档_google支付后台验证操作流程