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中的装饰器详解
Apr 13 Python
python统计日志ip访问数的方法
Jul 06 Python
玩转python爬虫之cookie使用方法
Feb 17 Python
Python模拟三级菜单效果
Sep 11 Python
python web.py开发httpserver解决跨域问题实例解析
Feb 12 Python
python微信公众号开发简单流程
Mar 23 Python
python批量查询、汉字去重处理CSV文件
May 31 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
Python中base64与xml取值结合问题
Dec 22 Python
基于python实现语音录入识别代码实例
Jan 17 Python
jupyter notebook 多环境conda kernel配置方式
Apr 10 Python
python中的时区问题
Jan 14 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
PHP设计模式之装饰者模式
2012/02/29 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
php获取图片信息的方法详解
2015/12/10 PHP
详解YII关联查询
2016/01/10 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
php修改数组键名的方法示例
2017/04/15 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
[原创]jQuery实现合并/追加数组并去除重复项的方法
2018/04/11 jQuery
Vue props用法详解(小结)
2018/07/03 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
详解Django中的form库的使用
2015/07/18 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Django实现网页分页功能
2019/10/31 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
预备党员转正思想汇报
2014/01/12 职场文书
会计岗位职责模板
2014/03/12 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
会议营销主持词
2015/07/03 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
Python读取和写入Excel数据
2022/04/20 Python