python3-知识扩展扫盲易忘-generator的用法
前部分转自:
https://www.cnblogs.com/Tsukasa/p/6613934.html
通过列表list生成器,我们可以直接创建一个列表
1
2
3
|
>>> x = list ( range ( 1 , 11 ))
>>> x
[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
|
但是,受到内存的限制,列表的容量是有限的,而且创建一个包含100万1个亿的列表时候,不仅会占用很大的储存空间,如果有事我们只要访问前面几个元素,那后面大多数元素都白白浪费了。而且运作效率低下。
如果列表元素可以按某种算法推算出来,那我们是否可以在循环的过程中不断推算出后面的元素呢?这样就不必要创建一个完整的list列表了,从而提升程序的效率。在python中,这种一边循环一边计算的机制,称为生成器generator
要创建一个generator,有很多方法:
第一种方法很简单,就是只要把一个列表生成试的 [ ] 改成 ( ) 就可以创建一个generator:
1
2
3
4
5
6
|
>>> 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 0x00000000035BC410 >
|
L 是一个list, 而 G 是一个generator:它们在创建时候最基本的不同就list是 [ ] ,而generator是 ( ) 。
我们可以直接打印出list的全部元素,但是怎么打印出generator的全部元素呢?
1
2
|
>>> g
<generator object <genexpr> at 0x00000000035BC410 >
|
如果要一个个打印出来,可以通过next()函数来获得generator的下一个返回值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
>>> next (g)
0
>>> next (g)
1
>>> next (g)
4
>>> next (g)
9
>>> next (g)
16
>>> next (g)
25
>>> next (g)
36
>>> next (g)
49
>>> next (g)
64
>>> next (g)
81
>>> next (g)
Traceback (most recent call last):
File "<pyshell#18>" , line 1 , in <module>
next (g)
StopIteration
|
generator保存的是算法,每次调用 next(g)的时候才会计算 g 的下一个元素值,直到计算到最后一个元素,没有下一个元素时,会返回stopIteration的错误。
当然,上面这种不停调用next (g)这种方法实在是太繁琐了,正确的方法是使用for循环,因为generator也是一个可迭代对象:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>> g = (x * x for x in range ( 10 ))
>>> for n in g:
... print (n)
...
0
1
4
9
16
25
36
49
64
81
|
jieba的cut_for_search输出可以按:
seg_list = jieba.cut_for_search("你好明天")
print(",".join(seg_list)) seglist 为generator
转载于:https://www.cnblogs.com/NPC-assange/p/10528287.html
python3-知识扩展扫盲易忘-generator的用法相关推荐
- 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)
本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...
- Reliable, Scalable, and Maintainable Applications 高可靠、易扩展、易运维应用
寻找翻译本书后续章节合作者 微信:18600166191 ---------------------------------- PART I Foundations of Data Systems ...
- 关于Verilog HDL的一些技巧、易错、易忘点
关键词: ·技巧篇: 组合逻辑输出类型选择; 语法上的变量交换; ·易忘篇: case/casex/casez语句; 循环语句: 数制和操作符: 数据类型: ·易错: 数据的截位与扩位 子模块例化中隐 ...
- linux命令忘了,Linux考试易忘命令
这是为了考试而做的笔记 mv命令可以移动可以改名 mv a /test //移动a到test文件夹下 mv a b //把a改名为b 软链接和硬链接的创建 ln -s profile a //prof ...
- Java工程师进阶知识完全扫盲, 太全了!!
项目简介 本期介绍的开源项目名称叫做:advanced-java 中文名:互联网 Java 工程师进阶知识完全扫盲,该项目主要是为Java开发工程师提供进阶知识讲解,从而提升Java工程师技术与能力! ...
- 三本类计算机行色专业,高考倒计时50天:物理34个易错易忘知识点
今天是4月18日,距离2016年高考(微博)还有50天. 今天的内容有四部分:第一部分:高招小贴士:第二部分:2016年高校招生政策,今天介绍天津大学(微博)2016年的招生政策:第三部分:高考志愿填 ...
- C语言学习专栏(1):易忘点
C语言学习专栏系列: [版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权): 本博客的内容来自于:C语言学习专栏(1):易忘点: 学习.合作与交流联系q384660495: 本博客的内容 ...
- css有趣的扩展知识,CSS知识扩展
CSS3.CSS2知识扩展 1:Column的几个属性值:columns是column-width与column-count的缩写前者指的宽度,后者指列数,column-gap指每列之间的宽度:col ...
- 区域医疗云his系统源码,具有可扩展、易共享、易协同的优势
云HIS系统采用SaaS软件应用服务模式,提供软件应用服务多租户机制,实现一中心部署多机构使用.相对传统HIS单机构应用模式,它可灵活应对区域医疗.医疗集团.医联体.连锁诊所.单体医院等应用场景,并提 ...
最新文章
- 浅谈同一家公司多个系统,共用登录用户名和密码
- Verilog中Dump函数及用法
- linux集群管理平台,基于Linux平台的高可用集群管理系统的研究与实现
- wamp2.2-64位 localhost和localhost/phpmyadmin不能访问问题解决
- PTA学生成绩排序-C语言详解
- .NET2.0学习资料
- 太阳能板清洗机器人科沃斯_科沃斯推出水清洗扫地机器人 要把打扫做的更彻底...
- UI实用素材|字体在设计中的重要性
- excel分类_Excel小技巧61:将输入的数字显示为中文
- 解析:百思买败于外部派系争斗
- 百度云盘下载限速破解的方法
- Java实现微信轰炸
- python实现简单的聊天小程序
- word转换成pdf转换器2015绿色版
- 适合笔记本电脑看Kindle MOBI 电子书的软件
- 流程:论文发表的流程
- Win10 触摸屏 快捷键操作
- 如何“杀”趋势杀毒网络版
- 群晖 DS412+ NAS 网络存储器详尽功能应用评测
- 联想微型计算机B3O5,触摸电视功能 联想B3系列一体电脑评测
热门文章
- 关于 CSS will-change 属性你需要知道的事
- useState使用和原理
- Element穿梭框Transfer与进度条组件绑定
- Android的清单文件添加百度地图SDK
- 20200308: 生成每种字符都是奇数个的字符串灯泡开关 III(leetcode5352-5353)
- oracle11g手工监听配置,手工在同一主机创建主备库oracle11g active dataguard
- python多线程下载多个文件_python多线程下载文件 练习1
- android编辑框显示,为EditText输入框加上提示信息
- VB 文件编码互换模块(支持 Ansi,UTF-8,Unicode(little endian),Unicode big endian)
- VB 单击ListView控件某列表头进行排序