详解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使用filetype精确判断文件类型
Jul 02 Python
python 实现12bit灰度图像映射到8bit显示的方法
Jul 08 Python
python 图像处理画一个正弦函数代码实例
Sep 10 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
Python实现序列化及csv文件读取
Jan 19 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
python词云库wordCloud使用方法详解(解决中文乱码)
Feb 17 Python
Python搭建Keras CNN模型破解网站验证码的实现
Apr 07 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
浅析Python 字符编码与文件处理
Sep 24 Python
python利用opencv保存、播放视频
Nov 02 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
php字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
ES6中Array.find()和findIndex()函数的用法详解
2017/09/16 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
送你43道JS面试题(收藏)
2019/06/17 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
python实现连连看辅助(图像识别)
2020/03/25 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
Python从MySQL数据库中面抽取试题,生成试卷
2021/01/14 Python
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
正隆泰信息技术有限公司上机题
2012/06/14 面试题
小班下学期评语
2014/05/04 职场文书
爱护花草树木的标语
2014/06/11 职场文书
2014年征兵标语
2014/06/20 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
银行授权委托书格式
2014/10/10 职场文书
教师学期个人总结
2015/02/11 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python