详解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 相关文章推荐
使用相同的Apache实例来运行Django和Media文件
Jul 22 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
详解Python核心对象类型字符串
Feb 11 Python
Python爬虫获取图片并下载保存至本地的实例
Jun 01 Python
Python使用pydub库对mp3与wav格式进行互转的方法
Jan 10 Python
Python设计模式之简单工厂模式实例详解
Jan 22 Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 Python
python 使用装饰器并记录log的示例代码
Jul 12 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
Spring @Enable模块驱动原理及使用实例
Jun 23 Python
如何在python中实现ECDSA你知道吗
Nov 23 Python
对象析构函数__del__在Python中何时使用
Mar 22 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实现生成验证码实例分享
2016/04/10 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
javascript 小数取整简单实现方式
2014/05/30 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
JS实现身份证输入框的输入效果
2017/08/21 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
jQuery 改变P标签文本值方法
2018/02/24 jQuery
Js中将Long转换成日期格式的实现方法
2018/06/05 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
玩转python爬虫之cookie使用方法
2016/02/17 Python
python实现excel读写数据
2021/03/02 Python
python批量赋值操作实例
2018/10/22 Python
python使用udp实现聊天器功能
2018/12/10 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
eclipse创建python项目步骤详解
2019/05/10 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
Python将string转换到float的实例方法
2019/07/29 Python
python logging 日志的级别调整方式
2020/02/21 Python
会计专业的自荐信
2013/12/12 职场文书
外贸英语专业求职信范文
2013/12/25 职场文书
行政副总岗位职责
2014/02/23 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
广告语设计及教案
2014/03/21 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
匿名信格式范文
2015/05/27 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server