Python列表推导式与生成器用法分析


Posted in Python onAugust 02, 2018

本文实例讲述了Python列表推导式与生成器用法。分享给大家供大家参考,具体如下:

1. 先看两个列表推导式

def t1():
  func1 = [lambda x: x*i for i in range(10)]
  result1 = [f1(2) for f1 in func1]
  print result1
def t2():
  func2 = [lambda x, i=i: x*i for i in range(10)]
  result2 = [f2(2) for f2 in func2]
  print result2

上面是两个列表推导式,里面包含有lambda表达式。输出结果分别为:

[18, 18, 18, 18, 18, 18, 18, 18, 18, 18]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

2. 为什么结果会不同

在上面的例子中,列表解析会生成一系列的函数对象。例如

def func():
  pass

会产生一个名为func的函数对象。注意不同于func(),加上小括号以后,此时变为了调用函数对象。

函数对象只有在调用的时候才开始对内部的变量进行引用。在t1()方法中,对i来说, 当函数对它引用的时候, 它已经变为9, 所以10个函数都引用了i=9

而对于t2()方法来说,lambda函数相当于变成接受两个参数了,所以返回了不一样的结果。

3. 另外的方式

def t3():
  func3 = (lambda x: x*i for i in range(10))
  result3 = [f3(2) for f3 in func3]
  print result3

上面的代码,输出的结果为:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

此时,相当于把列表推导式变成了生成器,结果又不一样了!

对于生成器, 只有你需要的时候它才会求值, 这也是和列表解析式的区别, 列表解析式只要你运行, 马上就把i变为了9, 可是生成器不会, 当你调用第一个函数的时候, 他把相应的i求出来, 然后停止, 等你下一次调用, 这个就完美符合我们的预期了.

更多关于Python相关内容可查看本站专题:《Python列表(list)操作技巧总结》、《Python字符串操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python遍历文件夹和读写文件的实现代码
Aug 28 Python
教你用Python写安卓游戏外挂
Jan 11 Python
python的socket编程入门
Jan 29 Python
python使用Tkinter实现在线音乐播放器
Jan 30 Python
django中send_mail功能实现详解
Feb 06 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
Pandas 对Dataframe结构排序的实现方法
Apr 10 Python
python3模块smtplib实现发送邮件功能
May 22 Python
使用python 打开文件并做匹配处理的实例
Jan 02 Python
python单例模式的多种实现方法
Jul 26 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 Python
Python实现byte转integer
Jun 03 Python
python flask实现分页的示例代码
Aug 02 #Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 #Python
Python实现正整数分解质因数操作示例
Aug 01 #Python
Python列表生成式与生成器操作示例
Aug 01 #Python
Python开发最牛逼的IDE——pycharm
Aug 01 #Python
django从请求到响应的过程深入讲解
Aug 01 #Python
python3.6的venv模块使用详解
Aug 01 #Python
You might like
PHP程序员的技术成长规划
2016/03/25 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
PHP CURL使用详解
2019/03/21 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
vue mounted组件的使用
2018/06/18 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
python的else子句使用指南
2016/02/27 Python
Python注释详解
2016/06/01 Python
使用python脚本实现查询火车票工具
2018/07/19 Python
便捷提取python导入包的属性方法
2018/10/15 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
Django框架 信号调度原理解析
2019/09/04 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
数据库基础的一些面试题
2012/02/25 面试题
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
linux面试题参考答案(2)
2015/12/06 面试题
施工班组长岗位职责
2014/01/05 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
2015年秋季校长开学典礼致辞
2015/07/29 职场文书
mysql如何配置白名单访问
2021/06/30 MySQL