详解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 正则表达式的高级用法
Dec 04 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
Pycharm学习教程(4) Python解释器的相关配置
May 03 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
彻彻底底地理解Python中的编码问题
Oct 15 Python
Python实现常见的回文字符串算法
Nov 14 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
python变量命名的7条建议
Jul 04 Python
Flask 上传自定义头像的实例详解
Jan 09 Python
python随机模块random的22种函数(小结)
May 15 Python
Python坐标轴操作及设置代码实例
Jun 04 Python
Python下载网易云歌单歌曲的示例代码
Aug 12 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
输出控制类
2006/10/09 PHP
php+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
wordpress之js库集合研究介绍
2007/08/17 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
vue的diff算法知识点总结
2018/03/29 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
python类装饰器用法实例
2015/06/04 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
Python自动化部署工具Fabric的简单上手指南
2016/04/19 Python
分析Python读取文件时的路径问题
2018/02/11 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
python获取响应某个字段值的3种实现方法
2020/04/30 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
大学生毕业自荐信
2013/10/10 职场文书
会计助理的岗位职责
2013/11/29 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
服务承诺书格式
2014/05/21 职场文书
运动会入场口号
2014/06/07 职场文书
大学生个人学习总结
2015/02/15 职场文书
秋季运动会加油词
2015/07/18 职场文书
写作技巧:怎样写好一份优秀工作总结?
2019/08/14 职场文书
Python 中的 copy()和deepcopy()
2021/11/07 Python