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 相关文章推荐
Python3学习笔记之列表方法示例详解
Oct 06 Python
django用户注册、登录、注销和用户扩展的示例
Mar 19 Python
python查询mysql,返回json的实例
Mar 26 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
用pycharm开发django项目示例代码
Jun 13 Python
Python + Flask 实现简单的验证码系统
Oct 01 Python
Python写出新冠状病毒确诊人数地图的方法
Feb 12 Python
Python应用实现处理excel数据过程解析
Jun 19 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 Python
Python打包为exe详细教程
May 18 Python
Python中的np.argmin()和np.argmax()函数用法
Jun 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
jquery select操作的日期联动实现代码
2009/12/06 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
python psutil库安装教程
2018/03/19 Python
python实战教程之自动扫雷
2018/07/13 Python
python 中xpath爬虫实例详解
2019/08/26 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
Python操作Word批量生成合同的实现示例
2020/08/28 Python
python 用struct模块解决黏包问题
2020/11/07 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
高中体育教学反思
2014/01/24 职场文书
应聘教师自荐书
2014/06/16 职场文书
2015年招聘工作总结
2014/12/12 职场文书
2014企业年终工作总结
2014/12/23 职场文书
PHP新手指南
2021/04/01 PHP
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
Python OpenCV之常用滤波器使用详解
2022/04/07 Python
python神经网络Xception模型
2022/05/06 Python