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

作者:bitcarmanlee 时间:2022-03-21 12:06:54 

本文实例讲述了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

标签:Python,列表推导式,生成器
0
投稿

猜你喜欢

  • 从 msxml6.dll 中获取 DOMDocument 对象的方法与属性

    2009-02-22 18:46:00
  • 2020年10款优秀的Python第三方库,看看有你中意的吗?

    2021-01-03 10:35:08
  • 深入SQL SERVER 2000的内存管理机制

    2010-04-25 10:52:00
  • 在ASP.NET 2.0中操作数据之三十七:DataList批量更新

    2023-07-23 10:59:03
  • Python初学者必须掌握的25个内置函数详解

    2022-07-02 16:09:21
  • python可视化text()函数使用详解

    2023-08-31 19:48:15
  • Laravel框架文件上传功能实现方法示例

    2023-11-15 19:16:31
  • Anaconda和Pycharm的安装配置教程分享

    2022-10-22 07:12:30
  • python中列表添加元素的几种方式(+、append()、extend())

    2022-07-17 19:59:42
  • Django框架静态文件使用/中间件/禁用ip功能实例详解

    2023-06-12 02:48:38
  • 如何让利用Python+AI使静态图片动起来

    2022-06-06 08:15:31
  • sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器)

    2011-09-30 11:49:22
  • 详解Python Flask API 示例演示(附cookies和session)

    2021-12-03 18:37:29
  • python中protobuf和json互相转换应用处理方法

    2023-03-15 11:50:55
  • sql处理数据库锁的存储过程分享

    2023-07-05 18:03:25
  • Python函数式编程

    2023-12-29 10:58:46
  • 如何让shell终端和goland控制台输出彩色的文字

    2023-07-13 03:24:56
  • Python个人博客程序开发实例信息显示

    2022-07-06 15:31:05
  • asp随机提取access数据库记录的几种方法

    2007-09-06 19:42:00
  • Python3实现简单可学习的手写体识别(实例讲解)

    2021-10-05 14:24:05
  • asp之家 网络编程 m.aspxhome.com