您的位置:首页 > 编程语言 > Python开发

【python】详解lambda匿名函数以及结合map、reduce、filter、sorted等使用

2018-01-23 00:05 1131 查看
简单来说, lambda 表达式通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数

lambda只是一个表达式,函数体比def简单很多

lambda的主体是一个表达式,而不是一个代码块。仅仅能表达有限的逻辑

lambda表达式是起到一个函数速写的作用,允许在代码内嵌入一个函数的定义

lambda格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值

lambda <变量名> : <逻辑表达式>   #冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值
#例如单个变量:lambda x : pow(x)
#多变量:lambda x,y : x+y


单变量函数表达式实例:

#定义一个x平方的函数
In [1]: a = lambda x: pow(x,2)

In [2]: a(2)
Out[2]: 4


多变量函数表达式实例:

In [3]: b = lambda x,y: x+y

In [4]: b(2,3)
Out[4]: 5


通常lambda定义匿名函数,主要结合运用场景进行使用:

函数式编程:以sorted、reduce、map、filter函数作为支持,lambda函数就可以应用在函数式编程中

作为闭包,作为定义在函数的内部的函数使用

1.1、map(func,seqs)与lambda

In [5]: list(map(lambda x: pow(x,2),list(range(5))))
Out[5]: [0, 1, 4, 9, 16]


1.2、sorted与lambda将list的数按照lambda定义的的key值排序

#一个整数列表,要求按照列表中元素的绝对值大小升序排列
In [18]: list1 = [3,5,-4,-1,0,-2,-6]
...: sorted(list1, key=lambda x: abs(x))
...:
Out[18]: [0, -1, -2, 3, -4, 5, -6]


1.3、filter(func,seqs)与lambda

# list1 = [3,5,-4,-1,0,-2,-6]
In [25]: list(filter(lambda x:x > 0,list1))
Out[25]: [3, 5]


1.4、reduce(function,seqs)与lambda

#其中reduce函数是python中的一个二元内建函数,它可以通过传给reduce中的函数(必须是二元函数)
#**依次**对数据集中的数据进行操作。例如传给reduce的函数是做加法,数据集是list1,那么reduce
#函数的作用就是将数据集中的数据依次相加
# list1 = [3,5,-4,-1,0,-2,-6]
In [30]: reduce(lambda x,y:x+y,list1)
Out[30]: -5


2、作为闭包,作为定义在函数的内部的函数使用

可以简单粗暴地理解为闭包就是一个定义在函数内部的函数,闭包使得变量即使脱离了该函数的作用域范围也依然能被访问到

In [37]: def add_f(x):
...:     return lambda y:y+x
...:

In [38]: add_f(4)(7)
Out[38]: 11


这里的lambda函数就是一个闭包,在全局作用域范围中,add_f(4)(7)正常执行且返回值为11,之所以返回11是因为在add_f局部作用域中,变量y的值在闭包的作用使得它在全局的作用域也可以被访问到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐