Python列表推导式与生成器用法分析
作者:bitcarmanlee 发布时间:2022-03-21 12:06:54
标签:Python,列表推导式,生成器
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/bitcarmanlee/article/details/78347870
0
投稿
猜你喜欢
- df.fillna主要用来对缺失值进行填充,可以选择填充具体的数字,或者选择临近填充。官方文档DataFrame.fillna(self,
- 先给一个例子:假设在一个表单中有一个按钮id="save"$(document).ready(function(){&n
- 是否曾经有过这样的经历:把一个元素置于另一个元素之上,而希望下面的那个元素成为可点击的?现在,利用css的pointer-events属性即
- 导航是网页设计的重点,我们在设计一个网站的时候,常常从导航入手,不夸张的说,导航的设计甚至决定了整个网站的风格。这就需要我们平常多留心收集优
- 最近正在做首页,处理很棘手的浏览器兼容的问题,主要调试的浏览器为 IE6 ,IE7 ,FF3 ,Opera9.5 ,Safari3.1.2兼
- 1.什么是装饰器?要理解什么是装饰器,您首先需要熟悉Python处理函数的方式。从它的观点来看,函数和对象没有什么不同。它们有属性,可以重新
- Css Reset是什么? 有些同行叫 "css复位",有些可能叫 "默认css".....相信看完
- 爬取过程:你好,李焕英 短评的URL:https://movie.douban.com/subject/34841067/comments?
- 这篇文章主要介绍了Python globals()和locals()对比详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- python Graham求凸包并画图python写Graham没有c++那么好写,但是python画图简单。只需要用matplotlib里
- python的其中一个强大之处就是它可以方便的集成很多的非标准库,今天在GitHub上溜达又发现了一个脏话处理神器,导入better_pro
- 前言:Ruby 与 Python 之间的差异在很大程度上可通过for循环看出本质。Python 拥有for语句。对象告诉for如何进行协作,
- 1.安装pm2 : npm install pm2 -gd这时在命令行下执行pm2命令可能找不到,需要执行如下命令1.创建软链接:ln -s
- 前两天简单认识了一下PyQt5,通过练习开发了一款在Window下自定义关机的小工具,代码如下:import os,sys,timefrom
- 现在已经是Python 3.8的最后一个alpha版本,接着就是本月底要发布的的3.8.0 beta 1了。按规定,3.8已经不会再添加(修
- 解决的问题需要将数组(list)或元组(tuple)中的元素导出到N个变量中。解决的方案任何序列都可以通过简单的变量赋值方式将其元素分配到对
- 信息图表设计(Inforgraphic Design),是信息设计(Information Design)学科的一个分支,它兴起于20世纪末
- 这篇文章主要介绍了python主线程与子线程的结束顺序实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 在进行浮动布局时,大多数人都深知,在必要的地方进行浮动清理:<div style="clear:both;">
- ChainMap是Python collections模块中的一个成员,它用来将多个map组合到一起。Chain是链条的意思,字面意思就是把