Python中的Lambda函数及其用法
Lambda函数又称为匿名函数,匿名函数就是没有名字的函数。有些函数如果只是临时一用,而且它的业务逻辑也很简单时,就可以将其定义为匿名函数。
匿名函数有个限制,就是只能有一个表达式,不用写return
,返回值就是该表达式的结果。
用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数。
先来看个简单的lambda函数:
1 | lambda x, y : x + y |
x
和y
是函数的两个参数,冒号后面的表达式是函数的返回值,很明显这个匿名函数就是在求两个变量的和,但作为一个函数,没有名字如何使用呢?
这里我们暂且给这个匿名函数绑定一个名字,这样使得我们调用匿名函数成为可能。
1 | lambda x, y : x+y add = |
它等同于常规函数
1 | def add1(x, y): |
lambda函数的使用场景(函数式编程)
sorted函数
例如:一个整数列表,要求按照列表中元素的绝对值大小升序排列。
1 | 3,5,-4,-1,0,-2,-6] list1 = [ |
排序函数sorted
支持接收一个函数作为参数,该参数作为sorted
的排序依据,这里按照列表元素的绝对值进行排序。
当然,也可以通过普通函数来实现:
1 | def foo(x): |
只不过是使用这种方式,代码看起来不够Pythonic而已。
lambda:这是Python支持的一种有趣的语法,它允许你快速定义单行的最小函数,可以用在任何需要函数的地方:
1 | lambda x,y : x+y add = |
map,reduce,filter函数
1 | # 求1~20的平方 |
闭包
闭包:一个定义在函数内部的函数,闭包使得变量即使脱离了该函数的作用域也依然能被访问到。
看一个用lambda函数作为闭包的例子:
1 | def add(n): |
这里的lambda
函数就是一个闭包,在全局作用域范围中,add2(15)
可以正常执行且返回值为20。之所以返回20是因为在add
局部作用域中,变量n的值在闭包的作用下也可以被访问到。