详解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通过线程实现定时器timer的方法
Mar 16 Python
详解Python的Django框架中的中间件
Jul 24 Python
Python简单读取json文件功能示例
Nov 30 Python
python用户管理系统的实例讲解
Dec 23 Python
pygame游戏之旅 创建游戏窗口界面
Nov 20 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
python实现石头剪刀布程序
Jan 20 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
Sep 16 Python
Pytorch evaluation每次运行结果不同的解决
Jan 02 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
js保存当前路径(cookies记录)
2010/12/14 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
vue Element左侧无限级菜单实现
2020/06/10 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
python3写爬取B站视频弹幕功能
2017/12/22 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
Django框架视图函数设计示例
2019/07/29 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
英语系毕业生自荐信
2013/10/31 职场文书
超市营业员岗位职责
2013/12/20 职场文书
我的五年职业生涯规划
2014/01/23 职场文书
材料加工工程求职信
2014/02/19 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
教师见习总结范文
2015/06/23 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL