详解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匹配中文的正则表达式
May 11 Python
win10下Python3.6安装、配置以及pip安装包教程
Oct 01 Python
python实现数据预处理之填充缺失值的示例
Dec 22 Python
Django使用Mysql数据库已经存在的数据表方法
May 27 Python
python使用matplotlib模块绘制多条折线图、散点图
Apr 26 Python
如何在Django项目中引入静态文件
Jul 26 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
python连接打印机实现打印文档、图片、pdf文件等功能
Feb 07 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
浅析Python 条件控制语句
Jul 15 Python
Python脚本打包成可执行文件过程解析
Oct 20 Python
python实现Thrift服务端的方法
Apr 20 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
js Function类型
2011/12/04 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
javaScript语法总结
2016/11/25 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
微信小程序 Buffer缓冲区的详解
2017/07/06 Javascript
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
2018/04/13 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
利用python批量给云主机配置安全组的方法教程
2017/06/21 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
Python 3.8 新功能全解
2019/07/25 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
中国高端家电购物商城:顺电
2018/03/04 全球购物
西部世纪.net笔试题面试题
2014/04/03 面试题
护理专业推荐信
2013/11/07 职场文书
家长会学生家长演讲稿
2013/12/29 职场文书
2014年学习委员工作总结
2014/11/14 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
二年级作文之动物作文
2019/11/13 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js