Python lambda表达式原理及用法解析
开篇先明义: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中Lambda表达式详解
如果你在学校读的是计算机科学专业,那么可能学过 Lambda 表达式, 不过可能从来没有用过它.如果你不是计算机科学专业,它们看着可能 有点儿陌生(或者只是"曾经学习过的东西").在这一节里,虽然我们 不打算深入学习这类函数,但是会用几个例子来演示它们是如何用在网 页抓取中的. Lambda 表达式本质上就是一个函数,可以作为变量传入另一个函数: 也就是说,一个函数不是定义成 f(x, y),而是可以定义成 f(g(x), y) 或 f(g(x), h(y)) 的形式. Beautif
-
python lambda表达式在sort函数中的使用详解
1.lambda表达式一般用法 语法: lamda argument:expression example: add = lambda x, y: x+y print(add(10, 20))<br data-filtered="filtered">>>> 30 2.lambda表达式在sort函数中的使用 假如a是一个由元组构成的列表,对该列表进行排序时,我们需要用到参数key,也就是关键词,如下面代码所示,lambda是一个匿名函数,是固定写法:x表示
-
Python lambda表达式filter、map、reduce函数用法解析
前言 lambda是表达式,用于创建匿名函数,可以和filter.map.reduce配合使用. 本文环境Python3.7. 一.lambda表达式 lambda 只包含一个语句,用于创建匿名函数. 语法: lambda [arg1 [,arg2,.....argn]]:expression arg1 -- 参数,可以有多个 expression -- 表达式 使用例子: f1 = lambda x : x > 10 print(f1(1)) #输出:False print(f1(11)) #
-
Python三元运算与lambda表达式实例解析
这篇文章主要介绍了Python三元运算与lambda表达式实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 三元运算是if...else...的简化版,lambda表达式是函数的简化版 三元运算(三目运算) # 判断两个数中的较大者 fun(a1,a2): return a1 if a1>a2 else a2 v = fun(5,2) print (v) # v = 5 lambda运算(一行运算符) #规范 lambda 参数1,参数2
-
Python使用lambda表达式对字典排序操作示例
本文实例讲述了Python使用lambda表达式对字典排序操作.分享给大家供大家参考,具体如下: lambda表达式也常用于字典排序,既然写到字典排序,那就把按键排序和按值排序都写写好了. 字典按键排序 显然按键排序,需要用字典中每个元素的第一项排序 dict = {'a':1,'b':2,'c':3,'d':4,'e':3,'f':1,'g':7} sorted_dict_asc = sorted(dict.items(),key=lambda item:item[0]) sorted_dic
-
python lambda表达式(匿名函数)写法解析
这篇文章主要介绍了python lambda表达式(匿名函数)写法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 # lambda表达式,为了解决简单函数的情况,如: def func(a1,a2): return a1 + a2 func = lambda a1,a2:a1+a2 # 上面这两个是一样的 def func1(a1,a2): return a1 + a2 func2 = lambda a1,a2:a1+a2 wdc = fu
-
Python学习笔记之lambda表达式用法详解
本文实例讲述了Python学习笔记之lambda表达式用法.分享给大家供大家参考,具体如下: Lambda 表达式 使用 Lambda 表达式创建匿名函数,即没有名称的函数.lambda 表达式非常适合快速创建在代码中以后不会用到的函数. 麻烦的写法: def multiply(x, y): return x * y 使用Lambda之后: double = lambda x, y: x * y Lambda 函数的组成部分: 关键字 lambda 表示这是一个 lambda 表达式. lamb
-
Python的条件表达式和lambda表达式实例
条件表达式 条件表达式也称为三元表达式,表达式的形式:x if C else y.流程是:如果C为真,那么执行x,否则执行y. 经过测试x,y,C可以是函数,表达式,常量等等: def put(): print('this is put()') def get(): print('this is get()') def post(): return 0 method = put if post() else get method() lambda表达式 lambda [arguments] :
-
Python lambda表达式原理及用法解析
开篇先明义:lambda是表达式,而def函数是语句代码块 所以lambda其实就是一个稍微高级一点的式子而已,只不过这个式子比较长,而且还会自己进行一些逻辑上的处理而已,心里不要虚 lambda也被叫做匿名函数,通俗点说就是一个没有名字的函数,那可不就是一个函数式子吗?在python的垃圾回收机制来看,如果一些内存空间没有引用指向,那这些内存空间就被回收掉,所以这个连名字都没有的匿名函数,肯定是用过即销的. 综上所述,我们可以很容易的得出lambda表达式的特点: 1.用一个表达式就能实现简单
-
Python partial函数原理及用法解析
这篇文章主要介绍了Python partial函数原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 介绍 partial其实是Python模块functools中定义的一个函数,当我们需要经常调用某个函数时,但是其中某些参数是已知的固定值,这样可能会让代码显得冗余,这个时候就可以考虑使用partial函数. 使用 假设我们要做二进制转十进制 int('1000000', base=2) # 64 int('1010101', bas
-
Python openpyxl模块原理及用法解析
这篇文章主要介绍了Python openpyxl模块原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 此模块不是Python内置的模块需要安装,安装方法如下 pip install openpyxl 注意: 此模块只支持offce 2010,即是电子表格后缀是*.xlsx 1.openpyxl模块常用函数 import openpyxl wb = openpyxl.load_workbook('example.xlsx') ####
-
Python子进程subpocess原理及用法解析
python的子进程嘛,就是利用python打开一个子进程(当然像是一句废话),但是可能和我们理解的不太一样. 一:如何理解? 我们可能的理解:多开一个进程运行某个python函数(如果只想实现这个功能,请使用multiprocessing包) 正确的理解:python通过shell/cmd 打开一个新的程序进程,而不限于python函数,比如我们可以开一个"ls"指令的进程列出当前文件夹下的文件,这个"ls"指令明显是一个shell通用函数,而不是python 函
-
Python生成器generator原理及用法解析
前言 生成器generator 生成器的本质是一个迭代器(iterator) 要理解生成器,就要在理解一下迭代,可迭代对象,迭代器,这三个概念 Python生成器generator简介 iteration, iterable, iterator 迭代(iteration):在python中迭代通常是通过for...in...来实现的.而且只要是可迭代对象iterable,都能进行迭代. 可迭代对象(iterable):Python中的任意的对象,只要它定义了可以返回一个迭代器的 __iter__
-
Python Merge函数原理及用法解析
Merge函数的用法 简单来说Merge函数相当于Excel中的vlookup函数.当我们对2个表进行数据合并的时候需要通过指定两个表中相同的列作为key,然后通过key匹配到其中要合并在一起的values值. 然后对于merge函数在Pandas中分为1vs1, 多(m)vs1,以及多(m)vs多(m)这三种场景.但是平时用的最多的往往是多vs1的这种场景.也就是说2个表中其中一个表作为key的值会出现重复,而另外一个表作为key的值则是唯一. 这种场景也很好理解.例如:我们在生产环境中对服务
-
Python eval函数原理及用法解析
eval函数就是实现list.dict.tuple与str之间的转化 str函数把list,dict,tuple转为为字符串 一.字符串转换成列表 a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]" print(type(a)) b = eval(a)print(type(b)) print(b) 二.字符串转换成字典 a = "{1: 'a', 2: 'b'}" print(type(a)) b = eval(a) print(ty
-
Python lambda表达式用法实例分析
本文实例讲述了Python lambda表达式用法.分享给大家供大家参考,具体如下: lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. lambda所表示的匿名函数的内容应该是很简单的,如果复杂的话,干脆就重新定义一个函数了,使用lambda就有点过于执拗了. lambda就是用来定义一个匿名函数的,如果还要给他绑定一个名字的话,就会显得有点画蛇添足,通常是直接使用lambda函数.如下所示: add = lambda x, y : x+y
-
python中metaclass原理与用法详解
本文实例讲述了python中metaclass原理与用法.分享给大家供大家参考,具体如下: 什么是 metaclass. metaclass (元类)就是用来创建类的类.在前面一篇文章<python动态创建类>里我们提到过,可以用如下的一个观点来理解什么是metaclass: MyClass = MetaClass() MyObject = MyClass() metaclass是python 里面的编程魔法 同时在前面一篇<python动态创建类>文章里描述动态创建class 的
随机推荐
- 基于Vue如何封装分页组件
- Extjs4 Treegrid 使用心得分享(经验篇)
- 使用 Iisftpdr.vbs 删除FTP虚拟目录(支持本地与远程)
- 教大家玩转Python字符串处理的七种技巧
- JS实现匀加速与匀减速运动的方法示例
- php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
- CI(CodeIgniter)模型用法实例分析
- php循环检测目录是否存在并创建(循环创建目录)
- python 多进程通信模块的简单实现
- Python的Django框架中模板碎片缓存简介
- Vue数据驱动模拟实现3
- Django框架中render_to_response()函数的使用方法
- 用Python实现换行符转换的脚本的教程
- javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
- 分享20个提升网站界面体验的jQuery插件
- 在textarea中显示html页面的javascript代码
- javascript fullscreen全屏实现代码
- tomcat常见的错误与解决方案小结
- CentOS 6.5上的Tomcat启动报错问题解决方法
- 深入解析Java编程中面向字节流的一些应用