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通过pil将图片转换成黑白效果的方法
Mar 16 Python
python文件的md5加密方法
Apr 06 Python
python selenium 对浏览器标签页进行关闭和切换的方法
May 21 Python
python简单实现AES加密和解密
Mar 28 Python
Python+OpenCV实现实时眼动追踪的示例代码
Nov 11 Python
Python 脚本的三种执行方式小结
Dec 21 Python
Pytorch的mean和std调查实例
Jan 02 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
Jan 08 Python
基于Python实现一个春节倒计时脚本
Jan 22 Python
python实现商品进销存管理系统
May 30 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和MySql中计算时间差的方法详解
2015/03/27 PHP
jQuery 操作XML入门
2008/12/25 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
js判断字符长度及中英文数字等
2014/03/19 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
python简单实例训练(21~30)
2017/11/15 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
python分布式计算dispy的使用详解
2019/12/22 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
python speech模块的使用方法
2020/09/09 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
C#可否对内存进行直接的操作
2015/02/26 面试题
行政助理岗位职责
2013/11/10 职场文书
《日月潭》教学反思
2014/02/28 职场文书
财务负责人任命书
2014/06/06 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
中学语文教学反思
2016/02/16 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python
Golang的继承模拟实例
2021/06/30 Golang
python中使用redis用法详解
2022/12/24 Redis