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

简单来说, 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的值在闭包的作用使得它在全局的作用域也可以被访问到。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值