博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python生成器
阅读量:6798 次
发布时间:2019-06-26

本文共 900 字,大约阅读时间需要 3 分钟。

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含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)024681012141618

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

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

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

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

 

 

参考文档:

转载于:https://www.cnblogs.com/qing-chen/p/7267113.html

你可能感兴趣的文章
GridView Print and Print Preview
查看>>
PL/SQL之--包
查看>>
SEOer怎样安排一天的工作
查看>>
深入学习golang(4)—new与make
查看>>
就近期面试所见,谈谈求职者的问题和面试官的问题
查看>>
markdown的语法说明
查看>>
高效的SQLSERVER分页查询(推荐)
查看>>
Android布局实现圆角边框
查看>>
linux 重启网卡的方法
查看>>
assert_param
查看>>
JVM参数配置
查看>>
【leetcode】Best Time to Buy and Sell 2(too easy)
查看>>
Centos下Apache使用Symlink访问外部目录出现403
查看>>
TortoiseSVN中Branching和Merging实践
查看>>
Substring with Concatenation of All Words
查看>>
SNF快速开发平台3.0之-界面个性化配置+10种皮肤+7种菜单-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout...
查看>>
耗时两月,NHibernate系列出炉
查看>>
careercup-树与图 4.3
查看>>
[转载]开源实体映射框架EmitMapper介绍
查看>>
[转]移动端开发经验
查看>>