什么是lambda?
lambda是Python中预留的一个关键词,当我们需要一个函数,而又不想重新去为函数命名时,我们就可以使用lambda关键词来简单的去定义一个函数,也就是所谓的匿名函数,它在我们的编程过程中会出现很多次。
lambda函数的语法
在Python中,我们可以这样定义一个lambda函数,它的语法格式为:
lambda argument_list: expression
- argument_list是参数列表,也就是函数所用到的参数
- expression是关于参数的表达式,表达式中的参数需要在参数列表中有定义
这里我们需要注意,参数列表argument_list与表达式expression之间要用":"隔开,并且lambda函数具有输入和输出,它的输入就是传入到参数列表argument_list的值,输出是根据表达式expression计算得到的结果(等效于return)。
lambda函数的用法
-
将lambda函数赋值给变量,通过变量间接调用lambda函数
例如我们定义一个lambda函数,并将其赋值给变量a,就能直接用变量a调用lambda函数>>> a=lambda x:x+3 >>> a(5) 8
-
将lambda函数作为其他函数的返回值
lambda函数作为其他函数的返回值时,此时lambda函数实际为函数的内嵌函数>>>def test(n): ...return lambda x:x+n >>>t=test(3) >>>t(2) 5
lambda函数作为test函数的内部函数,能够访问外部函数的变量n,就形成了所谓的闭包,这里不作进一步阐述
-
将lambda函数作为其他函数的参数
利用lambda函数我们可以实现对函数编程,即把lambda函数当做参数传递给其他函数,例如map()函数,map()函数会根据提供的函数对指定序列做映射,这里以一个阿里面试题为例:用一行代码实现对a=[1,2,3,4,5]的偶数位置的元素进行加3后求和
我们可以利用定义lambda函数,然后把它当作参数传递给map()函数,就可以返回对偶数位置的映射,然后对其求和>>> a=[1,2,3,4,5] >>> map(lambda x:x+3,a[1::2]) >>> print(list(map(lambda x:x+3,a[1::2]))) [5, 7] >>> sum(map(lambda x:x+3,a[1::2])) 12
与map()函数类似的内置函数还有filter()、reduce()、sorted()等。
>>> filter(lambda x: x % 3 == 0,[1,2,3,4,5,6,7,8,9]) >[3, 6, 9]
>>> from functools import reduce >>> reduce(lambda x,y: x+y,[1,2,3,4,5]) 15
>>> sorted([0,-3,2,-9,7,4,-1],key=lambda x: abs(x)) [0, -1, 2, -3, 4, 7, -9]
总结
python鼓励我们利用lambda写一些简单的函数,lambda函数可以使我们的代码更加紧凑,并且不用担心命名冲突。但语法格式决定lambda只能是一个表达式,而不是一个代码块,因此不能实现复杂的逻辑(不能写条件分支语句和异常处理等)。