python生成器是什么

生成器(英文名Generator),是一个可以像迭代器那样使用for循环来获取元素的函数。

生成器的出现(Python2.2+),实现了延时计算,从而缓解了在大量数据下内存消耗过猛的问题。

当你在PythonShell中敲入一个生成器对象,会直接输出generatorobject提示你这是一个生成器对象

>>>gen=(iforiinrange(5))>>>genat0x10cae50b0>2.如何创建生成器?使用列表推导式在上面已经演示过,正常我们使用列表推导式时是下面这样子,使用[],此时生成的是列表。

>>>mylist=[iforiinrange(5)]>>>mylist[0,1,2,3,4]而当你把[]换成(),返回的就不是列表了,而是一个生成器

>>>gen=(iforiinrange(5))>>>genat0x10cae50b0>使用yieldyield是什么东西呢它相当于我们函数里的return,但与return又有所不同。

当一个函数运行到yield后,函数的运行会暂停,并且会把yield后的值返回出去。

若yield没有接任何值,则返回None

yield虽然返回了,但是函数并没有结束

请看如下代码,我定义了一个generator_factory函数,当我执行gen=generator_factory()时,gen就是一个生成器对象

>>>defgenerator_factory(top=5):...index=0...whileindex>>gen=generator_factory()>>>gen3.生成器的使用从一个生成器对象中取出元素,和我们前面学过的通过切片访问列表中的元素不一样,它没有那么直观。

想要从生成器对象中取出元素,只有两种方法:

第一种方法:使用next方法一个一个地把元素取出来,如果元素全部取完了,生成器会抛出StopIteration的异常。

>>>gen=(xforxinrange(3))>>>genat0x1072400b0>>>>next(gen)0>>>next(gen)1>>>next(gen)2>>>next(gen)Traceback(mostrecentcalllast):File"",line1,inStopIteration第二种方法:使用for循环一个一个地迭代出来

>>>gen=(xforxinrange(3))>>>foriingen:...print(i)...0124.生成器的激活生成器对象,在创建后,并不会执行任何的代码逻辑。

想要从生成器对象中获取元素,那么第一步要触发其运行,在这里称之为激活。

方法有两种:

使用next():上面已经讲过

使用generator.send(None)

还以下面这段代码为例,可以看到gen.send(None)相当于执行了next(gen)

>>>defgenerator_factory(top=5):...index=0...whileindex>>>>>gen=generator_factory()>>>gen.send(None)index值为:01>>>gen.send(None)index值为:125.生成器的状态生成器在其生命周期中,会有如下四个状态

GEN_CREATED#生成器已创建,还未被激活

GEN_RUNNING#解释器正在执行(只有在多线程应用中才能看到这个状态)

GEN_SUSPENDED#在yield表达式处暂停

GEN_CLOSED#生成器执行结束

通过下面的示例可以很轻松地理解这一过程(GEN_RUNNING这个状态只有在多线程中才能观察到,这里就不演示啦)

>>>gen=(xforxinrange(2))>>>frominspectimportgetgeneratorstate>>>gen=(xforxinrange(3))>>>getgeneratorstate(gen)'GEN_CREATED'>>>>>>next(gen)0>>>getgeneratorstate(gen)'GEN_SUSPENDED'>>>next(gen)1>>>next(gen)Traceback(mostrecentcalllast):File"",line1,inStopIteration>>>getgeneratorstate(gen)'GEN_CLOSED'6.生成器的异常在最前面,我有定义了一个生成器函数。

defgenerator_factory(top=2):index=0whileindex在没有元素可返回时,我最后抛出了StopIteration异常,这是为了满足生成器的协议。

实际上,如果你不手动抛出StopIteration,在生成器遇到函数return时,会我自动抛出StopIteration。

请看下面代码,我将raiseStopIteration去掉后,仍然会抛出异常。

THE END
1.Python当打之年热门文章 技巧| Python selenium滑块滑动至浏览器底部(顶部) 12814 Python | 电影Top250 + 数据可视化 11559 可视化 | Python精美地图动态展示近20年全国各省市GDP 10213 Pandas+Pyecharts | 北京某平台二手房数据分析+可视化 8935 资源| Python可视化系列文章资源(源码+数据) 8648 https://blog.csdn.net/weixin_42152811
2.python自动做海报mob64ca12e732bb的技术博客如何用Python自动做海报 1. 流程图 准备模板图片导入所需库处理模板图片编辑海报内容保存生成的海报 2. 整体流程 首先我们需要准备一张模板图片作为海报的基础,然后导入所需的库,对模板图片进行处理,编辑添加内容后保存生成的海报。下面我们来详细介绍每一步需要做什么以及具体的代码。 https://blog.51cto.com/u_16213393/10390422
3.python进阶之密码生成器游戏源码专辑相关主题 :python 爱给网提供海量的游戏源码专辑资源素材免费下载, 本次作品为python进阶之密码生成器, 本站编号48508671, 该游戏源码专辑素材大小为2k, 该素材已被下载:10次, 更多精彩游戏源码专辑素材,尽在爱给网。 浏览本次作品的您可能还对 蟒蛇 感兴趣。https://www.aigei.com/item/python_jin_jie_1.html
4.fastposterv2.8.4发布电商海报生成器OSCHINA fastposter 海报生成器,电商海报编辑器,电商海报设计器,fast 快速生成海报 海报制作 海报开发。贰维海报,图片海报,分享海报贰维码推广海报,支持 Java Python PHP Go JS 小程序。基于 Vue 和 Pillow。 社区版 v2.8.4 发布 预览按钮更换位置,与专业版保持一致 https://www.oschina.net/news/200999
5.python3.8与3.7的区别王利头Python 3.8 优化了列表推导和生成器表达式的执行,减少了不必要的操作,从而提高了速度。 错误修复 Python 3.8 修复了许多在 Python 3.7 中存在的错误,包括: 修复了多线程环境中dict访问时的竞争条件。 修复了 os.path.exists() 在某些情况下返回错误结果的问题。 https://www.wanglitou.cn/article_39068.html
6.文字转图片生成器腾讯云开发者社区国产开源一个神奇的,一个能让你早点下班回家的,低代码海报生成器 介绍 fastposter海报生成器是一款快速开发海报的工具。只需上传一张背景图,在对应的位置放上组件(文字、图片、二维码、头像)即可生成海报。 点击代码直接生成各种语言的调用代码,方便快速开发。 现已服务众多电商类项?,多个项?有54W+https://cloud.tencent.com/developer/information/%E6%96%87%E5%AD%97%E8%BD%AC%E5%9B%BE%E7%89%87%E7%94%9F%E6%88%90%E5%99%A8-article
7.批量生产文档的软件叫什么零代码企业数字化知识站批量生产文档的软件通常被称为“文档生成器”或“自动文档生成工具”。这些工具包括Microsoft Word的邮件合并功能、LaTeX的模板功能、Python的docxtpl库等。这些工具的核心功能是通过模板和数据源的结合,自动生成大量格式一致的文档。Microsoft Word的邮件合并功能是一种非常直观且易于使用的方法,只需准备好模板文档和数据源https://www.jiandaoyun.com/blog/article/419392/
8.ElementUI表单设计及代码生成器表单Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。 仓库地址:https://gitee.com/mrhj/form-generator 展开 TAG标签:Element表单设计代码生成器Python海报生成器源码2021-09-28 海报编辑器最左侧是组件列表。可以在最左侧https://www.zztuku.com/detail-11652.html
9.GitHubchenyl8848/greatopensourcetmagic-editor - 海报生成器。在线体验 resume-design - 一款基于 Vue3 + TypeScript + Vite + Element-Plus + pinia 实现的开源免费简历制作神器。 vue-color-avatar - 一个纯前端实现的头像生成网站。在线体验 sun-panel - 一个服务器、NAS 导航面板、Homepage、浏览器首页。在线体验 在线文档 vue-flow - https://github.com/chenyl8848/great-open-source-project
10.开源书签三步快速完成大屏:配置数据源--->写SQL配置数据集--->拖拽生成大屏。让管理层随时随地掌控业务动态,让每个决策都有数据支撑 fast-poster 海报生成器,图片生成器,电商海报编辑器,海报设计器,海报制作,海报开发。生成朋友圈分享海报并生成图片,二维码海报,图片海报,海报组件,二维码推广海报,支持Java Python PHP Go http://www.stepyun.com/
11.免费制作h5腾讯云开发者社区fastposter v2.13.0 一分钟完成开发海报 [云服务来袭] fastposter v2.13.0 一分钟完成开发海报 云服务来袭 fastposter海报生成器是一款快速开发海报的工具。只需上传一张背景图,在对应的位置放上组件(文字、图片、二维、头像)即可生成海报。 点击代码直接生成各种语言的调用代码,方便快速开发。 现已https://cloud.tencent.com.cn/developer/information/%E5%85%8D%E8%B4%B9%E5%88%B6%E4%BD%9Ch5
12.20130011. 在Python中,关于生成器(Generator)和迭代器(Iterator)的关系,以下说法正确的是( ) A. 生成器是一种特殊的迭代器,它使用 yield 语句来生成值B. 迭代器一定是生成器,但生成器不一定是迭代器C. 生成器和迭代器都必须实现 __next__ 方法,但生成器不需要实现 __iter__ 方法D. 生成器和迭代器都可以通过https://www.wjx.cn/xz/289949955.aspx
13.Cinema4D课时:旋转命令视频教程课时44:对称、PYthon生成器、LOD、减面 第七章:手动建模 课时45:机械钻头底座制作 课时46:连接结构体制作1 课时47:连接结构体制作2 课时48:钻头发动机制作 课时49:钻头模型制作 课时50:机械钻头最终完成 第八章:C4D灯光讲解 课时51:C4D灯光讲解 课时52:点光源 课时53:聚光灯 课时54:区域光 https://www.yiihuu.com/v_227676.html
14.千图网免费在线设计图片素材网站春节年俗系列海报55 张 AI工具 AI创作先人一步 AI绘画 进入 云设计 进入 智能抠图 进入 智能压缩 进入 行业频道专区行业专区| 营销增长 懂老板更懂客户 Industry 行业频道进入零售快消进入IT互联网进入政务图库进入房地产进入本地生活进入医疗健康进入广告印刷进入 https://www.58pic.com/