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的subprocess模块总结
Nov 07 Python
python实现跨excel的工作表sheet之间的复制方法
May 03 Python
python 3.6.4 安装配置方法图文教程
Sep 18 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
PyTorch的深度学习入门之PyTorch安装和配置
Jun 27 Python
详解Django-channels 实现WebSocket实例
Aug 22 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
python队列原理及实现方法示例
Nov 27 Python
python属于解释型语言么
Jun 15 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
Pandas直接读取sql脚本的方法
Jan 21 Python
tensorflow+k-means聚类简单实现猫狗图像分类的方法
Apr 28 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 cache类代码(php数据缓存类)
2010/04/15 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
List all the Databases on a SQL Server
2007/06/21 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
webpack实现一个行内样式px转vw的loader示例
2018/09/13 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
[06:09]辉夜杯主赛事开幕式
2015/12/25 DOTA
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
python获取多线程及子线程的返回值
2017/11/15 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
Java语言程序设计测试题改错题部分
2014/07/22 面试题
怎样写留学自荐信
2013/11/11 职场文书
自荐信格式简述
2014/01/25 职场文书
秸秆管理实施方案
2014/03/15 职场文书
2014最新实习证明模板
2014/10/02 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL