首页 > 代码库 > python生成器
python生成器
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含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) #生成器
创建L
和g
的区别仅在于最外层的[]
和()
,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生成器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。