码迷,mamicode.com
首页 > 其他好文 > 详细

生成器

时间:2015-05-23 21:12:46      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

来源于廖雪峰

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

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

要创建一个generator,有很多方法。第一种很简单,只要把一个列表生成式的 [] 改成 () ,就创建了一个generator:

>>> L = [x*x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x*x for x in range(10))
>>> g
<generator object <genexpr> at 0x022C2AD0>

创建 L 和 g  的区别仅在于最外层 [] 和 () ,  L 是一个list,而 g  是一个generator。我们怎么可以直接打印generator的每一个元素呢?如果要一个一个打印出来,可以通过generator的 next() 方法:

 

生成器

标签:

原文地址:http://www.cnblogs.com/world-/p/4524837.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!