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 29 Python
python通过索引遍历列表的方法
May 04 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
python下os模块强大的重命名方法renames详解
Mar 07 Python
python实现教务管理系统
Mar 12 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
May 24 Python
解决python报错MemoryError的问题
Jun 26 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
Oct 09 Python
Django实现分页显示效果
Oct 31 Python
Python创建空列表的字典2种方法详解
Feb 13 Python
python+opencv边缘提取与各函数参数解析
Mar 09 Python
Python restful框架接口开发实现
Apr 13 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 之Section与Cookie使用总结
2012/09/14 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
Stop SQL Server
2007/06/21 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
2016/08/13 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
Pygame框架实现飞机大战
2020/08/07 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
上海期货面试题
2014/01/31 面试题
酒后驾驶检讨书
2014/01/27 职场文书
优秀会计求职信
2014/07/04 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
中学生检讨书范文
2014/11/03 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
会计主管竞聘书
2015/09/15 职场文书
Python中的 Set 与 dict
2022/03/13 Python