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中的闭包实例详解
Aug 29 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
利用 Monkey 命令操作屏幕快速滑动
Dec 07 Python
python将文本中的空格替换为换行的方法
Mar 19 Python
python和shell获取文本内容的方法
Jun 05 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
Django 删除upload_to文件的步骤
Mar 30 Python
Python turtle库的画笔控制说明
Jun 28 Python
Python调用REST API接口的几种方式汇总
Oct 19 Python
python3定位并识别图片验证码实现自动登录功能
Jan 29 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 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开发框架Laravel数据库操作方法总结
2014/09/03 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
js读取cookie方法总结
2014/10/31 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
js解决movebox移动问题
2016/03/29 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
JavaScript常用数学函数用法示例
2018/05/14 Javascript
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
Python 条件判断的缩写方法
2008/09/06 Python
如何运行Python程序的方法
2013/04/21 Python
Python中使用SAX解析xml实例
2014/11/21 Python
利用信号如何监控Django模型对象字段值的变化详解
2017/11/27 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
详解Python3 pandas.merge用法
2019/09/05 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
python安装gdal的两种方法
2019/10/29 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
原装进口全世界:天猫国际
2016/08/03 全球购物
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
世界最大的票务市场:viagogo
2017/02/16 全球购物
法律专业个人实习自我鉴定
2013/09/23 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
大学班级文化建设方案
2014/05/06 职场文书
MySQL基础(一)
2021/04/05 MySQL
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL