Python lambda表达式原理及用法解析


Posted in Python onAugust 18, 2020

开篇先明义:lambda是表达式,而def函数是语句代码块

所以lambda其实就是一个稍微高级一点的式子而已,只不过这个式子比较长,而且还会自己进行一些逻辑上的处理而已,心里不要虚

lambda也被叫做匿名函数,通俗点说就是一个没有名字的函数,那可不就是一个函数式子吗?在python的垃圾回收机制来看,如果一些内存空间没有引用指向,那这些内存空间就被回收掉,所以这个连名字都没有的匿名函数,肯定是用过即销的。

综上所述,我们可以很容易的得出lambda表达式的特点:

1.用一个表达式就能实现简单的函数逻辑

2.没有名字,只是一个表达式

3.用过即销

优点:

1.简单功能可以不用函数

2.节省内存空间,不止是用过即销节省,它在建立函数的时候也节省,普通的def函数在初始化的时候会进行栈分配,而lambda则不需要

3.它作为一个表达式,可以嵌套在其他的地方使用,比如列表中,而def函数则不行

下面来举例来具体看看:

m, n = 1,2
def num(m, n):
  return m+n
f = lambda m, n : m+n
def_result = num(m,n)
lambda_result = f(m, n)
print("def_result:",def_result)
print("lambda_result:",lambda_result)

打印结果:

def_result: 3
lambda_result: 3

上面程序代码的第4、6行可以合并为:

lambda_result = (lambda m, n : m+n)(m, n)

再举一个lambda用来编写跳转表(jump table)的栗子,其实就是列表中嵌套lambda表达式

lst = [lambda x,y:x+y,lambda x,y:x*y, lambda x,y:x/y,lambda x,y:x-y]
print(lst[0](1,2))
print(lst[1](1,2))
print(lst[2](1,2))
print(lst[3](1,2))
lst2 = {"add":lambda x,y:x+y, "reduce":lambda x,y:x-y}
print(lst2["add"](1,2))

打印结果为:

3
2
0.5
-1
3

上面的这一堆栗子都可以更清晰的看出lambda是一个表达式,它后面跟的就是一个简短的函数表达式

这里引出lambda表达式的语法格式:

lambda 参数:表达式

其中:

1.参数可以是一个、多个、可以是任何类型的变量

2.表达式只可以是一个式子,不可以是一个语句

# 下面的f、glambda表达式的书写都是错误的
# f = lambda x,y : if x>y return x
# g = lambda x,y : return x>y
m = lambda x,y: x+y
n = lambda a,b: a>=0
# print(f(1,2))
# print(g(1,2))
print(m(1,2))
print(n(1,2))

lambda的用处:

lambda常常和map、filter、reduce、sorted、列表推导式 结合一起用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用线程封装的一个简单定时器类实例
May 16 Python
python转换字符串为摩尔斯电码的方法
Jul 06 Python
如何在Python函数执行前后增加额外的行为
Oct 20 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
深入理解Python中的super()方法
Nov 20 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
Python递归实现汉诺塔算法示例
Mar 19 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
Dec 17 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
Python运算符+与+=的方法实例
Feb 18 Python
4种非常实用的python内置数据结构
Apr 28 Python
python 使用建议与技巧分享(四)
Aug 18 #Python
Python正则re模块使用步骤及原理解析
Aug 18 #Python
python使用建议技巧分享(三)
Aug 18 #Python
python3跳出一个循环的实例操作
Aug 18 #Python
OpenCV图片漫画效果的实现示例
Aug 18 #Python
Django DRF APIView源码运行流程详解
Aug 17 #Python
Django CBV模型源码运行流程详解
Aug 17 #Python
You might like
怎样辨别一杯好咖啡
2021/03/03 新手入门
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
2011/10/31 PHP
PHP两种快速排序算法实例
2015/02/15 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
Javascript 继承机制的实现
2009/08/12 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
python中self原理实例分析
2015/04/30 Python
Python中单、双下划线的区别总结
2017/12/01 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
Internet体系结构
2014/12/21 面试题
社团活动总结怎么写
2014/06/30 职场文书
民用住房租房协议书
2014/10/29 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
2015年幼儿园师德师风建设工作总结
2015/10/23 职场文书
React配置子路由的实现
2021/06/03 Javascript
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python