项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.先看两个列表推导式

def t1():func1 = [lambda x: x*i for i in range(10)]result1 = [f1(2) for f1 in func1]print result1def 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中的列表推导与生成器相关推荐

  1. Python 中的列表推导式

    Python 中的列表推导式 简单用法 添加多个条件 多个列表使用 替换 Reduce 和 Lambda 嵌套列表推导式 列表推导式是一种 Python 构造,可减少生成新列表或过滤现有列表所需的代码 ...

  2. mysql数据字典生成器_「python技术」列表推导、生成器表达式和字典推导的差异及其示例

    #开往春天新创作大赛# 前言 列表推导式构建列表的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列.自python2.7以后,列表推导和生成器表达式的概念就应用到了字典上,所以就有了字典推导, ...

  3. python中的列表生成式_生成器中的列表推导式

    # 2,用列表推导式做下列小题 # 1)过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 # lst=['abc','asfg','ad','ap'] # print([i.upper() fo ...

  4. python中创建列表推导身份证号_Python列表推导和生成器表达式

    一.什么是列表推导 # 例1 lst = [] for i in range(1, 11): lst.append(i) print(lst) # 例2 lst = [i for i in range ...

  5. python 生成器表达式_Python中的列表理解与生成器表达式

    python 生成器表达式 The list is a collection of different types of elements and there are many ways of cre ...

  6. 零基础Python完全自学教程15:Python中的列表

    欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第14课< Python中的列表 >.本节课是一个大课,我分了这些知识点进行 ...

  7. python关键字列表的表达式,python 列表推导和生成器表达式的使用

    序列 序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列. 容器序列与扁平序列 容器序列存放的是对象的引用,包括list.tuple.collections.de ...

  8. Python 列表推导 、生成器表达式与声明式编程

    1.****列表推导********* 用到函数的一个常见的操作是将其用于列表的所有项,并使用结果创建一个新的列表.例如: # coding=utf-8 ''' ****列表推导********* 用 ...

  9. python之生成器(~函数,列表推导式,生成器表达式)

    一.生成器 概念:生成器的是实质就是迭代器 1.生成器的贴点和迭代器一样,取值方式也和迭代器一样. 2.生成器一般由生成器函数或者声称其表达式来创建,生成器其实就是手写的迭代器. 3.在python中 ...

  10. db2 语句包括不必要的列表_列表推导和生成器表达式的滥用

    列表推导是我在Python中最喜欢的功能之一.所以我写了一篇关于它们的文章进行讨论,并在PyCon 2018上进行了3小时的演讲论述. 虽然我很喜欢列表推导,但我发现一旦新的Pythonistas开始 ...

最新文章

  1. Oracle报错createPool,Jmeter中连接Oracle报错Cannot create PoolableConnectionFactory(示例代码)...
  2. android 让应用恢复前台显示_android – 当应用程序返回前台时出现问题
  3. oracle 物理读,逻辑读的理解
  4. 注解不自动导包_玩转SpringBoot2.X:SpringBoot自动配置原理大揭秘
  5. C语言八大排序算法,附动图和详细代码解释!
  6. 转:基于TLS1.3的微信安全通信协议mmtls介绍
  7. 计算机兴趣班记录,计算机兴趣班活动记录.doc
  8. asp.net WebForm页面间传值方法
  9. 【MySQL】MySQL RROR! The server quit without updating PID file
  10. freertos 编译c++失败_FreeRTOS的初次见面
  11. sonar不支持mysql_sonar-iOS的实践
  12. 微型计算机普遍采用的数字编码是,计算机原理复习题1
  13. 《黑马程序员 MySQL数据库入门到精通,从MySQL安装到MySQL高级、MySQL优化全囊括》——学习笔记基础篇
  14. java抽签_java  抽签程序  【滚动抽签】
  15. 【软件测试基础理论知识】1.1.常见的软件开发模型之———瀑布模型、原型模型、快速原型模型
  16. 服务器seo优化,百度SEO优化服务器选择是什么?
  17. DOORS vs DNG
  18. linux怎么模糊查找文件,linux模糊查找一个文件的方法
  19. idea 亮度 调整_如何设置显示屏幕的亮度
  20. php 下载的文件损坏,PHP readfile()导致文件下载损坏

热门文章

  1. android -------- 打开本地浏览器或指定浏览器加载,打电话,打开第三方app
  2. C#笔记30:Trace、Debug和TraceSource的使用以及日志设计
  3. 关于网络安全检查的问题
  4. 严重: Servlet.service() for servlet [taotao-manager] in context with path [] threw exception [Request
  5. svn一些基本操作含义
  6. const和define在值定义上的区别
  7. 活字格企业Web应用生成器V3.0发布更新,支持插件管理和多人协作开发
  8. CentOS 7 忘记root密码的解决之道
  9. 关于缓存使用中的一些看法
  10. Quick-Cocos2d-x初学者游戏教程(五) --------------------- 辅助工具和跳转场景