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 29 Python
pycharm 使用心得(二)设置字体大小
Jun 05 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 Python
深入理解Python中命名空间的查找规则LEGB
Aug 06 Python
在MAC上搭建python数据分析开发环境
Jan 26 Python
python3.0 模拟用户登录,三次错误锁定的实例
Nov 02 Python
python字符串string的内置方法实例详解
May 14 Python
提升Python程序性能的7个习惯
Apr 14 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
Python pandas实现excel工作表合并功能详解
Aug 29 Python
Python Django框架防御CSRF攻击的方法分析
Oct 18 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 14 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之COOKIE支持详解
2010/09/20 PHP
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
2017/11/01 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
python3中的md5加密实例
2018/05/29 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
python判断数字是否是超级素数幂
2018/09/27 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
postman传递当前时间戳实例详解
2019/09/14 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
tensorflow 实现数据类型转换
2020/02/17 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
python logging模块的使用详解
2020/10/23 Python
QA工程师岗位职责
2013/11/20 职场文书
测绘工程专业个人自我评价
2013/12/01 职场文书
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
晚归检讨书
2014/02/19 职场文书
化工操作工岗位职责
2014/04/29 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
优秀教师先进材料
2014/12/16 职场文书
在校生证明
2015/06/17 职场文书
python 经纬度求两点距离、三点面积操作
2021/06/03 Python