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查看多台服务器进程的脚本分享
Jun 11 Python
centos系统升级python 2.7.3
Jul 03 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
Apr 20 Python
我用Python抓取了7000 多本电子书案例详解
Mar 25 Python
python中的&amp;&amp;及||的实现示例
Aug 07 Python
Django实现auth模块下的登录注册与注销功能
Oct 10 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
Feb 28 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
Matplotlib animation模块实现动态图
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 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
jquery 批量上传图片实现代码
2010/01/28 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
2019/09/10 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
python模拟enum枚举类型的方法小结
2015/04/30 Python
Python3中的json模块使用详解
2018/05/05 Python
django的ORM模型的实现原理
2019/03/04 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
python pygame实现球球大作战
2019/11/25 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
python 如何上传包到pypi
2020/12/24 Python
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
linux面试题参考答案(9)
2016/01/29 面试题
青年志愿者事迹材料
2014/02/07 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
2015年民兵整组工作总结
2015/07/24 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang