python lambda 表达式形式分析


Posted in Python onApril 03, 2022

前言:

在日常开发的过程中,有时候会临时用到一些简单的函数,她们的业务逻辑会相对简单,简单到并不值得让他们留下名字,这个时候,就很值得使用匿名函数 lambda函数来完成这个需求。

lambda表达式格式

lambda arguments : statement

表达式以​​ lambda​​关键字开头,冒号 ":" 左侧是函数的传入参数,当有多个入参时使用逗号划分开,冒号右侧是返回值的表达式语句,函数会根据表达式计算结果并将其返回。​​lambda​​表达式会创建一个函数对象,可以对其赋值并如同普通函数一样使用。下面定义了一个求平方的 lambda 表达式:

>>> lambda x : x * x
<function <lambda> at 0x000001C98ED8E040>

其中x是该函数的参数,冒号后面的表达式是函数的返回值,你能一眼看出这个函数就是是在求该变量的平方,但作为一个函数,没有名字如何使用呢?
这里我们暂且给这个匿名函数绑定一个名字,这样使得我们调用匿名函数成为可能。

>>> square = lambda x : x * x
>>> square
<function <lambda> at 0x000001C98F24B040>
>>> square(8)
64

它等同于常规函数

>>> def square(x: int) -> int:
... return x * x
...
>>> square
<function square at 0x000001C98ED8E040>
>>> square(8)
64

通过这个例子可以很明显观察到,lambda表达式和普通函数表达式在表现上的区别,lambda声明之后在python虚拟机中是记录为lambda,而普通函数会吧函数名直接体现出来,试想当发生异常的时候,​​Traceback​​打印了异常信息,但是不标记准确位置,也不跟你说哪个函数出问题,这样排错效率将极大的降低。

>>> div1 = lambda x : 1 / x
>>> div1(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
ZeroDivisionError: division by zero
>>> def div2(x: int) ->int:
... return 1 / 0
...
>>> div2(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in div2
ZeroDivisionError: division by zero

如代码所示,对于div1来说,发生异常了,之跟你说你写的某个lambda函数有异常,而且是在它的第一行,但就不跟你说是哪个函数:),但对于div2来说,就会很直接的说明,div2的第二行出问题了,这很容易定位啊,喏,这也很直观的暗示我们,写lambda不能太复杂,要尽最大努力的令其简洁,永不出错,如果有可能会有异常发生,倒还不如写成普通函数来的痛快。这个以上《Effective Python》所提倡的:使用辅助函数来取代复杂的表达式,并赋予函数清晰的名称以提高代码可读性。

匿名的用法

对于lambda来说,更多时候是用在高阶函数中,将其自己作为参数传入高阶函数中,比如在mapfilterreduce 函数,这些函数接收一个函数作为参数,如果不想额外定义函数,那么使用 lambda 表达式创建匿名函数就是最佳的应用场景。

>>> list(map(lambda x : x * x, [1, 2, 3, 4, 5, 6, 7, 8]))
[1, 4, 9, 16, 25, 36, 49, 64]
>>> list(filter(lambda x : x < 2, [1, 2, 3, 4, 5, 6, 7, 8]))
[1]
>>> reduce(lambda x, y: x + y, [1, 2, 3, 4, 5, 6, 7, 8])
36

python lambda 表达式形式分析

到此这篇关于python lambda 表达式形式分析的文章就介绍到这了,更多相关python lambda内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中工作日类库Busines Holiday的介绍与使用
Jul 06 Python
Python构建网页爬虫原理分析
Dec 19 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
Python中捕获键盘的方式详解
Mar 28 Python
Win10下python 2.7与python 3.7双环境安装教程图解
Oct 12 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
Jan 04 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
Python Selenium截图功能实现代码
Apr 26 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
基于pycharm实现批量修改变量名
Jun 02 Python
python 实现一个简单的线性回归案例
Dec 17 Python
PyTorch device与cuda.device用法
Apr 03 #Python
Python实现为PDF去除水印的示例代码
Apr 03 #Python
Python实现文字pdf转换图片pdf效果
Apr 03 #Python
python 实现图片特效处理
教你使用Python获取QQ音乐某个歌手的歌单
Python os和os.path模块详情
如何通过一篇文章了解Python中的生成器
You might like
模仿OSO的论坛(三)
2006/10/09 PHP
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
2016/03/01 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
python学习之面向对象【入门初级篇】
2017/01/21 Python
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
python绘制已知点的坐标的直线实例
2019/07/04 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
工程承诺书怎么写
2014/05/24 职场文书
法务专员岗位职责
2015/02/14 职场文书
跑吧孩子观后感
2015/06/10 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
python神经网络Xception模型
2022/05/06 Python
Java实现带图形界面的聊天程序
2022/06/10 Java/Android