前部分转自:

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的用法相关推荐

  1. 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

    本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...

  2. Reliable, Scalable, and Maintainable Applications 高可靠、易扩展、易运维应用

    寻找翻译本书后续章节合作者  微信:18600166191 ---------------------------------- PART I Foundations of Data Systems ...

  3. 关于Verilog HDL的一些技巧、易错、易忘点

    关键词: ·技巧篇: 组合逻辑输出类型选择; 语法上的变量交换; ·易忘篇: case/casex/casez语句; 循环语句: 数制和操作符: 数据类型: ·易错: 数据的截位与扩位 子模块例化中隐 ...

  4. linux命令忘了,Linux考试易忘命令

    这是为了考试而做的笔记 mv命令可以移动可以改名 mv a /test //移动a到test文件夹下 mv a b //把a改名为b 软链接和硬链接的创建 ln -s profile a //prof ...

  5. Java工程师进阶知识完全扫盲, 太全了!!

    项目简介 本期介绍的开源项目名称叫做:advanced-java 中文名:互联网 Java 工程师进阶知识完全扫盲,该项目主要是为Java开发工程师提供进阶知识讲解,从而提升Java工程师技术与能力! ...

  6. 三本类计算机行色专业,高考倒计时50天:物理34个易错易忘知识点

    今天是4月18日,距离2016年高考(微博)还有50天. 今天的内容有四部分:第一部分:高招小贴士:第二部分:2016年高校招生政策,今天介绍天津大学(微博)2016年的招生政策:第三部分:高考志愿填 ...

  7. C语言学习专栏(1):易忘点

    C语言学习专栏系列: [版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权): 本博客的内容来自于:C语言学习专栏(1):易忘点: 学习.合作与交流联系q384660495: 本博客的内容 ...

  8. css有趣的扩展知识,CSS知识扩展

    CSS3.CSS2知识扩展 1:Column的几个属性值:columns是column-width与column-count的缩写前者指的宽度,后者指列数,column-gap指每列之间的宽度:col ...

  9. 区域医疗云his系统源码,具有可扩展、易共享、易协同的优势

    云HIS系统采用SaaS软件应用服务模式,提供软件应用服务多租户机制,实现一中心部署多机构使用.相对传统HIS单机构应用模式,它可灵活应对区域医疗.医疗集团.医联体.连锁诊所.单体医院等应用场景,并提 ...

最新文章

  1. 浅谈同一家公司多个系统,共用登录用户名和密码
  2. Verilog中Dump函数及用法
  3. linux集群管理平台,基于Linux平台的高可用集群管理系统的研究与实现
  4. wamp2.2-64位 localhost和localhost/phpmyadmin不能访问问题解决
  5. PTA学生成绩排序-C语言详解
  6. .NET2.0学习资料
  7. 太阳能板清洗机器人科沃斯_科沃斯推出水清洗扫地机器人 要把打扫做的更彻底...
  8. UI实用素材|字体在设计中的重要性
  9. excel分类_Excel小技巧61:将输入的数字显示为中文
  10. 解析:百思买败于外部派系争斗
  11. 百度云盘下载限速破解的方法
  12. Java实现微信轰炸
  13. python实现简单的聊天小程序
  14. word转换成pdf转换器2015绿色版
  15. 适合笔记本电脑看Kindle MOBI 电子书的软件
  16. 流程:论文发表的流程
  17. Win10 触摸屏 快捷键操作
  18. 如何“杀”趋势杀毒网络版
  19. 群晖 DS412+ NAS 网络存储器详尽功能应用评测
  20. 联想微型计算机B3O5,触摸电视功能 联想B3系列一体电脑评测

热门文章

  1. 关于 CSS will-change 属性你需要知道的事
  2. useState使用和原理
  3. Element穿梭框Transfer与进度条组件绑定
  4. Android的清单文件添加百度地图SDK
  5. 20200308: 生成每种字符都是奇数个的字符串灯泡开关 III(leetcode5352-5353)
  6. oracle11g手工监听配置,手工在同一主机创建主备库oracle11g active dataguard
  7. python多线程下载多个文件_python多线程下载文件 练习1
  8. android编辑框显示,为EditText输入框加上提示信息
  9. VB 文件编码互换模块(支持 Ansi,UTF-8,Unicode(little endian),Unicode big endian)
  10. VB 单击ListView控件某列表头进行排序