本篇文章为大家展示了λ函数怎么在Python中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
Python中定义函数有两种方法,一种是用常规方式def定义,函数要指定名字,第二种是用λ定义,不需要指定名字,称为λ函数。
λ函数又称匿名函数,匿名函数就是没有名字的函数,函数没有名字也行?当然可以啦。有些函数如果只是临时一用,而且它的业务逻辑也很简单时,就没必要非给它取个名字不可。
好比电影里面的群众演员,往往他们的戏份很少,最多是衬托主演,跑跑龙套,他们需要名字吗?不需要,因为他们仅仅只是临时出镜,下次可能就用不着了,所以犯不着费心思给他们每个人编个号取个名字,毕竟取个优雅的名字是很费劲的事情。
先来看个简单λ函数
在祝辞祝辞,lambda x,, y : x + y & lt; function & lt; lambda>, at 0 x102bc1c80>
x和y是函数的两个参数,冒号后面的表达式是函数的返回值,你能一眼看出这个函数就是是在求两个变量的和,但作为一个函数,没有名字如何使用呢?这里我们暂且给这个匿名函数绑定一个名字,这样使得我们调用匿名函数成为可能
在祝辞祝辞,add =, lambda x,, y : x + y 在祝辞的在增加 & lt; function & lt; lambda>, at 0 x102bc2140> 在祝辞祝辞,添加(1、2) 3
它等同于常规函数
在祝辞祝辞,def add2 (x, y): ……,return x + y … 在祝辞祝辞add2 & lt; function  add2 at 0 x102bc1c80> 在祝辞祝辞,add2 (1、2) 3
如果定义匿名函数,还要给它绑定一个名字的话,有点画蛇添足,通常是直接使用λ函数。那么lamdba函数的正确使用场景在哪呢?
<强> 1,函数式编程强>
尽管Python算不上是一门纯函数式编程语言,但它本身提供了很多函数式编程的特性,像地图,减少,过滤、排序这些函数都支持函数作为参数,λ函数就可以应用在函数式编程中。
请看题:一个整数列表,要求按照列表中元素的绝对值大小升序排列,你会怎么做?思考一分钟往下看
在祝辞祝辞,list1 =, (3、5、4、1 0 2 6] 在祝辞祝辞,排序(list1,关键=lambda x:, abs (x)) [0,1,2,3,4,5,6)
排序函数排序的支持接收一个函数作为参数,该参数作为排序的排序依据,这里按照列表元素的绝对值进行排序,当然,我也可以用普通函数来实现:
在祝辞祝辞,def foo (x): ……,return abs (x) … 在祝辞祝辞,排序(list1,关键=foo) [0,1,2,3,4,5,6)
只不过是这种方式代码看起来不够神谕的而已。
<强> 2,闭包强>
闭包本身是一个晦涩难懂的概念,它可以专门单独用一篇文章来介绍,不过在这里我们可以简单粗暴地理解为闭包就是一个定义在函数内部的函数,闭包使得变量即使脱离了该函数的作用域范围也依然能被访问到。
来看一个用λ函数作为闭包的例子。
在祝辞祝辞,def my_add (n): ……,return lambda x: x + n … 在祝辞祝辞,add_3 =, my_add (3) 在祝辞祝辞,add_3 (7) 10
这里的λ函数就是一个闭包,在全局作用域范围中,add_3(7)可以正常执行且返回值为10,之所以返回10是因为在my_add局部作用域中,变量n的值在闭包的作用使得它在全局作用域也可以被访问到。
换成常规函数也可以实现闭包,只不过是这种方式稍显啰嗦。
在祝辞祝辞,def my_add (n): ……,def 包装(x): ……,return x + n ……,return 包装 … 在祝辞祝辞,add_5 =, my_add (5) 在祝辞祝辞,add_5 (2) 7
那么是不是任何情况λ函数都要比常规函数更清晰明了呢?看这个例子:
f =, lambda x:, [[y for j, y 拷贝列举(设置(x)), if (小姐:在祝辞,j),,, 1], for 小姐:拷贝范围(2 * * len(设置(x))))
这是一个返回某个集合的所有子集的λ函数,你看明白了吗?我是很难一眼看出来
禅宗的python中有这样一句话是显式优于隐式(明了胜于晦涩)。记住,如果用λ函数不能使你的代码变得更清晰时,这时你就要考虑使用常规的方式来定义函数。
上述内容就是λ函数怎么在python中使用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。