详解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僵尸进程产生的原因
Jul 21 Python
Python+OpenCV让电脑帮你玩微信跳一跳
Jan 04 Python
使用pytorch进行图像的顺序读取方法
Jul 27 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
Dec 28 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
Django静态文件加载失败解决方案
Aug 26 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 Python
Python实现我的世界小游戏源代码
Mar 02 Python
python文件目录操作之os模块
May 08 Python
python执行js代码的方法
May 13 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生成固定长度纯数字编码的方法
2015/07/09 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
JQuery的一些小应用收集
2010/03/27 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
利用python实现微信头像加红色数字功能
2018/03/26 Python
python使用turtle库绘制时钟
2020/03/25 Python
python 读取文件并替换字段的实例
2018/07/12 Python
python pillow模块使用方法详解
2019/08/30 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
个性发展自我评价
2014/02/11 职场文书
项目投资建议书
2014/05/16 职场文书
招标授权委托书样本
2014/09/23 职场文书
授权委托书怎么写
2014/09/25 职场文书
介绍信如何写
2015/01/31 职场文书
综合测评个人总结
2015/03/03 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书