码迷,mamicode.com
首页 > 编程语言 > 详细

python生成器

时间:2017-08-01 11:17:49      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:文档   list   obj   pytho   tab   获取   tps   python   for   

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

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

创建一个生成器

l = [ i*2 for i in range(10)]
print(l) #[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 列表生成式
G = (i*2 for i in range(10))
print(G) #生成器

 创建Lg的区别仅在于最外层的[]()L是一个list,而g是一个generator。

循环generator

可以用for对generator遍历。

for j in G:
    print(j)

0
2
4
6
8
10
12
14
16
18

 对于列表,我们可以在长度内任意取值,而生成器只有在循环到这一次了才有值。

l = [ i*2 for i in range(10)]
G = (i*2 for i in range(10))
print(l[4]) #8
print(G[4]) #TypeError: ‘generator‘ object is not subscriptable

generator中有一个next()方法可以直接使用。第一次使用返回第一个值,第二次使用返回第二个值,以此类推。这个是获取下一个值,generator中没有获取上一个值的方法。

G = (i*2 for i in range(10))
print(G.__next__()) #0
print(G.__next__()) #2
print(next(G)) #4
print(next(G)) #6

 

 

参考文档: 生成器---廖老师博客

python生成器

标签:文档   list   obj   pytho   tab   获取   tps   python   for   

原文地址:http://www.cnblogs.com/qing-chen/p/7267113.html

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