前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生成器

生成器

作者头像
py3study
发布2020-01-19 15:24:47
6870
发布2020-01-19 15:24:47
举报
文章被收录于专栏:python3python3

一、生成器的定义

在函数中使用yield关键字,由函数返回的结果就是生成器。

代码语言:javascript
复制
 1 def gen():
 2     print('gen')
 3     print('gen')
 4     yield 0
 5     print('gen')
 6     yield 1
 7     print('gen')
 8     yield 2
 9 g = gen()
10 print(g)
11 print(next(g))
12 print(g.__next__())

执行结果:

代码语言:javascript
复制
<generator object gen at 0x106ccfcf0>
gen
gen
0
gen
1

从上面的例子可以看出,

一、生成器是迭代器,next(g),g.__next__()取值照样可用。

二、yield关键字的作用可以保留生成器的状态。

三、从第二次迭代开始,每一次迭代会从上一次迭代返回结果的位置开始往下执行代码,遇到yield后返回迭代结果并保留生成器状态再退出。

二、使用生成器有什么好处

用例子来说明一下,

第一种情况:假设需要生成一百万个数据,我们可以通过循环来生成一百万个数据,然后存放于集合中。那么这个集合所占用的内存空间就非常大了。这种情况会一下子让程序崩溃。而且没办法做到获取数据的时效性,等到一百万个数据生成完毕,才可以取出数据。

第二种情况:假设同样生成一百万个数据,我们使用生成器来生成,我们已经明白生成器的定义和使用,生成器在使用的过程中,当需要迭代数据时,生成器就帮我们取出结果数据,每次迭代每次取出一个结果数据存放到变量中,变量使用过后,系统可以自动回收,可以很好地节省内存开支。并且可以做到获取数据的时效性。

在本人看来,使用生成器在程序需要处理或者生成大量数据时,可以极大地节省内存空间,在性能上有所保证,基于这点好处使用生成器才真正发挥它的强大作用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档