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 07 Python
Python中基础的socket编程实战攻略
Jun 01 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
详解Python with/as使用说明
Dec 13 Python
Python之列表实现栈的工作功能
Jan 28 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
python画双y轴图像的示例代码
Jul 07 Python
Python+Selenium使用Page Object实现页面自动化测试
Jul 14 Python
Python 获取windows桌面路径的5种方法小结
Jul 15 Python
python pygame实现挡板弹球游戏
Nov 25 Python
Window系统下Python如何安装OpenCV库
Mar 05 Python
pycharm 的Structure界面设置操作
Feb 05 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操作Memcache实例介绍
2013/06/14 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
微信支付开发发货通知实例
2016/07/12 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
PHP foreach遍历多维数组实现方式
2016/11/16 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
利用json获取字符出现次数的代码
2012/03/22 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
JavaScript每天定时更换皮肤样式的方法
2015/07/01 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
js上传图片预览的实现方法
2017/05/09 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
详解vue修改elementUI的分页组件视图没更新问题
2020/11/13 Javascript
python抓取百度首页的方法
2015/05/19 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
后勤部长岗位职责
2013/12/14 职场文书
网上卖盒饭创业计划书
2014/01/26 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
教育合作协议范本
2014/10/17 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
MySQL如何解决幻读问题
2021/08/07 MySQL