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创建系统目录的方法
Mar 11 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
Java分治归并排序算法实例详解
Dec 12 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
python zip()函数使用方法解析
Oct 31 Python
Python爬取365好书中小说代码实例
Feb 28 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
Mar 19 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
Apr 20 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 Python
将tf.batch_matmul替换成tf.matmul的实现
Jun 18 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 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实现利用MySQL保存session的方法
2014/08/23 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
jQuery DOM操作小结与实例
2010/01/07 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
JS获取整个页面文档的实现代码
2011/12/15 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
javascript制作2048游戏
2015/03/30 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
Python编程中的for循环语句学习教程
2015/10/14 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
Python join()函数原理及使用方法
2020/11/14 Python
测绘工程个人的自我评价
2013/11/23 职场文书
高一新生军训感言
2014/03/02 职场文书
党员对照检查材料思想汇报
2014/09/16 职场文书
出差报告范文
2014/11/06 职场文书
2014年女职工工作总结
2014/11/27 职场文书
SQL Server中锁的用法
2022/05/20 SQL Server
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python