详解Python匿名函数(lambda函数)

作者:luckycyong 时间:2022-09-11 12:33:00 

匿名函数lambda

Python使用lambda关键字创造匿名函数。所谓匿名,意即不再使用def语句这样标准的形式定义一个函数。这种语句的目的是由于性能的原因,在调用时绕过函数的栈分配。其语法是:

lambda [arg1[, arg2, ... argN]]: expression

其中,参数是可选的,如果使用参数的话,参数通常也会在表达式之中出现。

下面举例来说明lambda语句的使用方法(无参数)。


# 使用def定义函数的方法
def true():
 return True

#等价的lambda表达式
>>> lambda :True
<function <lambda> at 0x0000000001E42518>

# 保留lambda对象到变量中,以便随时调用
>>> true = lambda :True
>>> true()
True

下面再举一个带参数的例子。


# 使用def定义的函数
def add( x, y ):
 return x + y

# 使用lambda的表达式
lambda x, y: x + y

# lambda也允许有默认值和使用变长参数
lambda x, y = 2: x + y
lambda *z: z

# 调用lambda函数
>>> a = lambda x, y: x + y
>>> a( 1, 3 )
4
>>> b = lambda x, y = 2: x + y
>>> b( 1 )
3
>>> b( 1, 3 )
4
>>> c = lambda *z: z
>>> c( 10, 'test')
(10, 'test')

但由于lambda表达式特殊的设计,在特定的场景中也带来了一些不同的体验。

lambda是一个表达式,不是一个语句 这就使它能够出现在一些def不能出现的地方,比如,列表常量中。

lambda是单个的表达式,不是一个代码块 lambda的设计是为了满足简单函数的场景,仅能封装有限的逻辑,有复杂逻辑的情况有def来处理,所以lambda的功能要比def小的多。

另外,lambda表达式是可以嵌套的


>>> action = (lambda x : (lambda y : x + y))
>>> a = action(10)
>>> a(5)
15

这就是一个用lambda实现的闭包,与普通闭包一样,内嵌lambda表达式可以获得上层lambda函数的变量。

匿名函数的使用

匿名函数通常被用作高阶函数(higher-order function,参数为函数的函数)的参数。比如,几个内置函数:filter(),map(),reduce()。下面我们分别看看这几个函数的用法及达到相同效果的python另一种特征的用法

filter函数


>>> list = [1, 2, 3]
>>> result = filter(lambda x: x%2==0, list)
>>> result
[2]
>>> result = [x for x in list if x%2==0]
>>> result
[2]

map函数


>>> result = map(lambda x: x*2, list)
>>> result
[2, 4, 6]
>>> result = [x*2 for x in list]
>>> result
[2, 4, 6]

reduce函数


>>> result = reduce(lambda x, y: x+y,list)
>>> result
6
>>> result = sum(list)
>>> result
6

除reduce函数的替代用法比较特殊外,map和filter函数都可以使用列表推导式(list comprehension)代替。据说,当年lambda是一个Lisp程序员给python加的,而Guido是强烈反对的,他中意的是列表推导式。

跳转表(jump table)

lambda的另一种用法是用来编写跳转表,也就是行为列表或字典,能按需执行特定的动作。


>>> key = "get"
>>> {"abc":(lambda : 2 + 2),"bcd" : (lambda : 3 + 3), "get" : (lambda : 4 + 4)}[key]()
8

这样在字典中,每个lambda都留下了一个后续可以调用的函数,通过索引可以取出来,并调用。这就使字段可以成为更加通用的多路分支工具。

以上所述是小编给大家介绍的Python匿名函数(lambda函数)详解整合网站的支持!

来源:https://blog.csdn.net/qq_38526635/article/details/81326004

标签:python,匿名函数,lambda
0
投稿

猜你喜欢

  • SQL Server数据体系和应用程序逻辑详解

    2009-04-14 07:23:00
  • rs.open sql,conn,1,1与rs.open sql,conn,1.3还有rs.open sql,conn,3,2区别

    2011-02-24 10:49:00
  • try finally 妙用,防止内存泄漏

    2008-03-26 12:52:00
  • JS字符串转GBK编码超精简实现详解

    2024-04-28 09:43:13
  • 使用pycharm和pylint检查python代码规范操作

    2023-06-06 08:02:38
  • 分享9个好用的Python技巧

    2021-03-15 18:43:05
  • oracle命令行删除与创建用户

    2008-01-02 17:01:00
  • 在Python中append以及extend返回None的例子

    2021-05-12 10:33:34
  • Python制作动态字符画的源码

    2022-11-18 09:13:48
  • 微信小程序点餐系统开发常见问题汇总

    2024-04-10 10:52:00
  • Python从list类型、range()序列简单认识类(class)【可迭代】

    2022-09-09 14:07:20
  • 解读Scrapy回调函数callback传递参数的方式

    2022-12-02 04:12:53
  • JS实现淡入淡出图片效果的方法分析

    2023-08-24 08:45:44
  • 利用python计算时间差(返回天数)

    2023-10-22 02:39:30
  • python获得图片base64编码示例

    2023-10-29 07:02:37
  • JS控制输入框内字符串长度

    2024-02-24 19:30:59
  • python 环境安装及编辑器配置方法小结

    2021-09-13 02:39:25
  • python3 爬取图片的实例代码

    2021-08-22 13:37:57
  • 利用JavaScript实现拖拽改变元素大小

    2024-06-10 12:00:05
  • node命令行服务器(http-server)和跨域的实现

    2021-03-10 05:00:09
  • asp之家 网络编程 m.aspxhome.com