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编程-将Python程序转化为可执行程序[整理]
Apr 09 Python
python中wx将图标显示在右下角的脚本代码
Mar 08 Python
Python time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
Python上下文管理器和with块详解
Sep 09 Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 Python
Python with用法:自动关闭文件进程
Jul 10 Python
python实现邮件自动发送
Aug 10 Python
Python中Subprocess的不同函数解析
Dec 10 Python
python代码能做成软件吗
Jul 24 Python
python speech模块的使用方法
Sep 09 Python
python设置中文界面实例方法
Oct 27 Python
Python更改pip镜像源的方法示例
Dec 01 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
第二节--PHP5 的对象模型
2006/11/16 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
分页栏的web标准实现
2011/11/01 Javascript
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
Node.js异步I/O学习笔记
2014/11/04 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
ElementUI radio组件选中小改造
2019/08/12 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
python基于opencv实现人脸识别
2021/01/04 Python
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
机械专业应届生求职信
2013/09/21 职场文书
班主任2015新年寄语
2014/12/08 职场文书
2014年法务工作总结
2014/12/11 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
筑梦中国心得体会
2016/01/18 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
Java设计模式之代理模式
2022/04/22 Java/Android
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript