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实现随机密码字典生成器示例
Apr 09 Python
Python中列表的一些基本操作知识汇总
May 20 Python
Python读写unicode文件的方法
Jul 10 Python
利用python打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
详解python中executemany和序列的使用方法
Aug 12 Python
对numpy和pandas中数组的合并和拆分详解
Apr 11 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
Python3.5局部变量与全局变量作用域实例分析
Apr 30 Python
python把转列表为集合的方法
Jun 28 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
python进行二次方程式计算的实例讲解
Dec 06 Python
Python基础教程,Python入门教程(超详细)
Jun 24 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
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
python基础教程之while循环
2019/08/14 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
python创建文本文件的简单方法
2020/08/30 Python
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
几道Web/Ajax的面试题
2016/11/05 面试题
护理专业推荐信
2013/11/07 职场文书
运动会广播稿60字
2014/01/15 职场文书
高级编程求职信模板
2014/02/16 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
文明礼仪倡议书
2015/04/28 职场文书
初中思品教学反思
2016/02/20 职场文书