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


Posted in Python onApril 19, 2019

匿名函数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函数)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python中的字典与成员运算符初步探究
Oct 13 Python
基于python的Tkinter实现一个简易计算器
Dec 31 Python
python 简单的多线程链接实现代码
Aug 28 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
python读写LMDB文件的方法
Jul 02 Python
情人节快乐! python绘制漂亮玫瑰
Aug 18 Python
Python 数据库操作 SQLAlchemy的示例代码
Feb 18 Python
Python高级特性 切片 迭代解析
Aug 23 Python
python中单下划线(_)和双下划线(__)的特殊用法
Aug 29 Python
dpn网络的pytorch实现方式
Jan 14 Python
tensorflow 变长序列存储实例
Jan 20 Python
pycharm的python_stubs问题
Apr 08 Python
解决python3中的requests解析中文页面出现乱码问题
Apr 19 #Python
Python3中列表list合并的四种方法
Apr 19 #Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 #Python
python定时按日期备份MySQL数据并压缩
Apr 19 #Python
Python实现 版本号对比功能的实例代码
Apr 18 #Python
Python网络爬虫之爬取微博热搜
Apr 18 #Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 #Python
You might like
php实现图片缩放功能类
2013/12/18 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
jquery 双色表格实现代码
2009/12/08 Javascript
jQuery ajax cache缓存问题
2010/07/01 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
怎么清空javascript数组
2013/05/11 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
VSCode下好用的Python插件及配置
2018/04/06 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
Python如何telnet到网络设备
2021/02/18 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
文秘专业自荐信
2013/10/14 职场文书
4s店总经理岗位职责
2013/12/31 职场文书
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
经典婚礼主持词
2014/03/13 职场文书
《云房子》教学反思
2014/04/20 职场文书
停车场管理协议书范本
2014/10/08 职场文书
i7 6700处理器相当于i5几代
2022/04/19 数码科技