生成器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

g = (x * x for x in range(10))
g

通过next 函数一个一个的把数打印出来

next(g)
0
next(g)
1
next(g)
4
next(g)
9

当然,当范围超过了9的时候,就会出现报错,当然

我们一般不会使用这个方法

常见方法:

for n in g:
print n

这样便避免了一系列的报错

对于函数

出现yeild则就是一个生成器

这里,最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元...
    chen_000阅读 145评论 0 0
  • 前言 这篇博客写了很久,其实写每一篇博客用的时间还是挺长的,不够这有利于自己的学习,也想分享一下。之前也说了创建了...
    GitHubClub阅读 1,360评论 1 14
  • 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元...
    喵在野阅读 334评论 0 1
  • 2.4 生成器 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个...
    时间之友阅读 200评论 0 0
  • 特别讨厌自己现在的状态,非常讨厌,想改变,却考虑的太多,束缚太多。5月份开始,房贷就要开始交了,无形中又多了一条枷...
    用屁股思考2017阅读 1,313评论 2 18