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批量按比例缩小图片脚本分享
May 21 Python
Python实现字典的key和values的交换
Aug 04 Python
Python中 Lambda表达式全面解析
Nov 28 Python
python中类变量与成员变量的使用注意点总结
Apr 29 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
Python中的Django基本命令实例详解
Jul 15 Python
用python打印菱形的实操方法和代码
Jun 25 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
python多线程扫描端口(线程池)
Sep 04 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
jupyter 使用Pillow包显示图像时inline显示方式
Apr 24 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
Nov 15 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
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
详解从买域名到使用pm2部署node.js项目全过程
2018/03/07 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
python写的ARP攻击代码实例
2014/06/04 Python
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
值得收藏的10道python 面试题
2019/04/15 Python
Python hexstring-list-str之间的转换方法
2019/06/12 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
如何通过Django使用本地css/js文件
2020/01/20 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
中科前程Java笔试题
2016/11/20 面试题
客服实习的个人自我鉴定
2013/10/20 职场文书
《曹刿论战》教学反思
2014/03/02 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
Mysql案例刨析事务隔离级别
2021/09/25 MySQL