文档章节

零基础学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
江门
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
人人都能学会的python编程教程15:高级特性2

生成器 如果你想要一百万个数,而这些数里只有一百个数是你经常要用的,剩下的都几乎不怎么会用到,那么如果直接把这一百万个数全部放在list中是不明智的因为这会浪费较多存储空间,生成器就...

编程老司机
05/10
0
0
Python高级特性:Iterators、Generators和itertools

作为一门动态脚本语言,Python对编程初学者而言很友好,丰富的第三方库能够给使用者带来很大的便利。而Python同时也能够提供一些高级的特性方便用户使用更为复杂的数据结构。本系列文章共有三...

wt7315
06/26
0
0
提升Python程序性能的7个习惯,这是你应该具备的

  Python在性能方面不卓越,但是使用一些小技巧,可以提高Python程序的性能,避免不必要的资源浪费。      1. 使用局部变量   尽可能使用局部变量替代全局变量,可以是程序易于维护并...

菜鸟学Python
08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

kernel version does not match DSO version

错误信息: kernel version 384.11 does not match DSO version 384.130.0 原因是: cuda driver版本太低,不匹配DSO 简单有效的修复方法,升级nvidia driver, 步骤如下: 1. google seach ...

刘小米
今天
0
0
maven坐标和依赖

一、maven坐标详解 <groupId>com.fgt.club</groupId><artifactId>club-common-service-facade</artifactId><version>3.0.0</version><packaging>jar</packaging> maven的坐标元素说......

老韭菜
今天
1
0
springmvc-servlet.xml配置表功能解释

问:<?xml version="1.0" encoding="UTF-8" ?> 答: xml version="1.0"表示是此xml文件的版本是1.0 encoding="UTF-8"表示此文件的编码方式是UTF-8 问:<!DOCTYPE beans PUBLIC "-//SPRING//......

隐士族隐逸
今天
1
0
基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部