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 05 Python
python复制与引用用法分析
Apr 08 Python
python实现的简单窗口倒计时界面实例
May 05 Python
python从入门到精通(DAY 3)
Dec 20 Python
如何在django里上传csv文件并进行入库处理的方法
Jan 02 Python
Python3.5内置模块之time与datetime模块用法实例分析
Apr 27 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
python梯度下降算法的实现
Feb 24 Python
Python-jenkins模块之folder相关操作介绍
May 12 Python
selenium3.0+python之环境搭建的方法步骤
Feb 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
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
jqgrid 简单学习笔记
2011/05/03 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
js实现轮播图的完整代码
2020/10/26 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
怎样自定义一个异常类
2016/09/27 面试题
市场营销毕业生自荐信
2013/11/23 职场文书
汽修专业自荐信
2014/07/07 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
预备党员自我评价范文
2015/03/04 职场文书
房地产项目合作意向书
2015/05/08 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python
python数字图像处理实现图像的形变与缩放
2022/06/28 Python