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 StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
浅析PHP与Python进行数据交互
May 15 Python
Python实现重建二叉树的三种方法详解
Jun 23 Python
Python socket模块实现的udp通信功能示例
Apr 10 Python
python实现简单五子棋游戏
Jun 18 Python
Python 实现交换矩阵的行示例
Jun 26 Python
在python里面运用多继承方法详解
Jul 01 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
Mar 12 Python
Python闭包装饰器使用方法汇总
Jun 29 Python
python uuid生成唯一id或str的最简单案例
Jan 13 Python
python在package下继续嵌套一个package
Apr 14 Python
Python开发五子棋小游戏
May 02 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+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
laravel model 两表联查示例
2019/10/24 PHP
json 实例详细说明教程
2009/10/31 Javascript
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
新手常遇到的一些jquery问题整理
2010/08/16 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
详解JavaScript的变量
2019/04/04 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
Pandas中把dataframe转成array的方法
2018/04/13 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
python3获取当前目录的实现方法
2019/07/29 Python
python中的unittest框架实例详解
2021/02/05 Python
Trunki英国官网:儿童坐骑式行李箱
2017/05/30 全球购物
《诺贝尔》教学反思
2014/02/17 职场文书
秸秆管理实施方案
2014/03/15 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
房屋维修协议书范本
2014/09/25 职场文书
学期个人工作总结
2015/02/13 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
基石观后感
2015/06/12 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
Python面向对象之内置函数相关知识总结
2021/06/24 Python
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
Promise静态四兄弟实现示例详解
2022/07/07 Javascript
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js