文档章节

零基础学python-19.8 生成器表达式:当迭代器遇上列表解析

raylee2015
 raylee2015
发布于 2015/10/21 08:10
字数 517
阅读 2
收藏 0

这一章节我们来讨论一下生成器表达式。

从语法上来讲,生成器表达式跟列表解析一个样,只不过列表解析放在中括号里面,而生成器表达式放在小括号里面

>>> [x for x in range(5)]
[0, 1, 2, 3, 4]
>>> (x for x in range(5))
<generator object <genexpr> at 0x01E5F3A0>
>>> list(x for x in range(5))
[0, 1, 2, 3, 4]
>>>


从上面的代码可以看见,小括号返回的是一个生成器,要使用list函数才能解析里面的内容。

说白了,从结果上面来看,其实列表解析就是在使用list函数迫使生成器一次性生成所有结果。

>>> g=(x for x in range(5))
>>> next(g)
0
>>> next(g)
1
>>>

 

>>> [x for x in range(5)]
[0, 1, 2, 3, 4]



从执行上面来看,列表解析一次性在内存里面构建所有的结果,而生成器表达式只不过返回一个对象,而且这个对象支持迭代协议,只要在迭代环境当中都可以操作。

>>> g=(x for x in range(5))
>>> for item in g:
	print(item)

	
0
1
2
3
4
>>>


例如我们可以通过for来得到生成器里面的对象的值。

>>> g=(x for x in range(5))
>>> list(map(lambda x :x**2,g))
[0, 1, 4, 9, 16]
>>>
>>> g=(x for x in range(5))
>>> list(filter(lambda x:x%2==0,g))
[0, 2, 4]
>>>
>>> g=(x for x in range(5))
>>> list(sorted(g,reverse=True))
[4, 3, 2, 1, 0]
>>>



又如上面的代码,可以在map、filter和sorted等支持迭代协议的环境中,都可以支持对象的操作。

 

总结:这一章节主要说明了生成器与列表解析之间的关系,以及生成器支持迭代协议,可以在迭代环境中对其中的对象进行操作。

 

这一章节就说到这里,谢谢大家

------------------------------------------------------------------

点击跳转零基础学python-目录

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/raylee2007/article/details/48860823

共有 人打赏支持
raylee2015
粉丝 6
博文 265
码字总数 44224
作品 0
江门
私信 提问
Python基础总结成千行代码,让Python入门更简单!

只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python!当时我就不信邪啊,等我看完之后,即使作为一个Python老鸟了,还是领会到了很多教授他的独特见解!...

糖宝lsh
09/10
0
0
Python的迭代器和生成器

Python的迭代器和生成器 先说迭代器,对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数,iter()是python的内置函数。iter(...

开元中国2015
2015/07/30
219
0
IronPython和C#交互

http://www.cnblogs.com/xukun588/ IronPython和C#交互 IronPython是一个.NET平台上的Python实现,包括了完整的编译器、执行引擎与运行时支持,能够与.NET已有的库无缝整合到一起。 IronPyth...

仰望星空_588
08/11
0
0
Iterator, Generator 与 Yield

Iterator Iterator(迭代器) 是一种常见的对象,它允许调用者方便的遍历该对象中的元素,广泛的运用于多种编程语言,如 Python, Java 和 Ruby 等。以 Python 为例,Iterator 需要实现两种方法...

koala bear
2016/10/18
0
0
解析式/推导式, 生成器

列表解析式(List Comprehension) 语法: [返回值 for 元素 in 可迭代对象 if 条件] 使用中括号[],内部是for循环,if条件可选. 返回一个新的列表. 列表解析式的作用: 编译器会优化,不会因为简写...

羽丰1995
2017/10/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

崛起于Springboot2.X之集成工作流Activiti5.22(42)

声明:该博客主要是Springboot1.X和Springboot2.X集成Activiti5.22版本,并说一下两个版本的搭建不同的地方 技术:Springboot2.0.3+mysql+jpa(自动生成25张表)+Activiti5.22 /然后Springboo...

木九天
3分钟前
0
1
windows环境下搭建rabbitMQ开发环境

windows环境下搭建rabbitMQ开发环境 下载与安装 erlang rabbitmq 是使用erlang语言开发的,所以需要erlang环境; 下载地址 rabbitmq 下载地址 rabbitmq与erlang版本关系 下载之后直接安装即可...

晨猫
14分钟前
0
0
JVM 中的守护线程

特点 通常由JVM启动 运行在后台处理任务,比如垃圾回收等 用户启动线程执行结束或者JVM结束时,会等待所有的非守护线程执行结束,但是不会因为守护线程的存在而影响关闭。 判断线程是否为守护...

小刀爱编程
17分钟前
1
0

参考 极客时间《数据结构与算法之美》

grace_233
30分钟前
2
0
谈谈KMP算法

KMP算法的资料网上已经一大把了,主要用来解决某个文本片段是否包含另一个子串问题。这里假设文本片段的长度n大于子串长度m,如: 文本串为ABCDABGHIJK 子串为 ABCDABE 在传统的暴力解法中当...

FAT_mt
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部