详解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遍历numpy数组的实例
Apr 04 Python
Python 判断奇数偶数的方法
Dec 20 Python
详解python运行三种方式
May 13 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
Python 私有属性和私有方法应用场景分析
Jun 19 Python
浅析Django接口版本控制
Jun 26 Python
梳理总结Python开发中需要摒弃的18个坏习惯
Jan 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中利用XML技术构造远程服务(下)
2006/10/09 PHP
我的论坛源代码(二)
2006/10/09 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
热能动力工程毕业生自荐信
2013/11/07 职场文书
幼儿园教师请假制度
2014/01/16 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
团组织推优材料
2014/12/29 职场文书
终止劳动合同通知书
2015/04/16 职场文书
导游词之唐山景点
2019/12/18 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL