Python定义匿名函数lambda()

在Python中使用lambda()关键字来定义匿名函数。lambda关键字定义的函数也被成为lamba()函数,其函数的语法如下:

lamba参数列表:lambda体

注意:lambda体部分不能是一个代码块,不能包含多条语句,只有一条语句,语句会计算一个结果并返回给lambda()函数,但与有名称函数不同的是,不需要使用return语句返回。

示例代码:

#lambda函数
def calc(opr):
    if opr=='+':
        return lambda a,b:(a+b)
    else:
        return lambda a,b:(a-b)
f1=calc('+')
f2=calc('-')
print('{0}+{1}={2}'.format(1,2,f1(1,2)))
print('{0}-{1}={2}'.format(4,2,f2(4,2)))

运行结果为:1+2=3 4-2=2

另外定义add()和sub()函数实现同样效果代码如下:

#定义加法函数
def add(a,b):
    return(a+b)
#定义减法函数
def sub(a,b):
    return(a-b)
#定义计算函数
def calc(opr):
    if opr =='+':
        return add
    else:
        return sub
f1=calc('+')
f2=calc('-')
print('{0}+{1}={2}'.format(1,2,f1(1,2)))
print('{0}-{1}={2}'.format(4,2,f2(4,2)))

运行结果为:1+2=3 4-2=2

由上面对比可见,使用lambda()可以减少代码量,但是也比较复杂。

上边替换原则

将def add(a,b):   替换为:lambda a,b:(a+b)
    return(a+b)                                               

def sub(a,b):   替换为:lambda a,b:(a-b)
    return(a-b)                                               

再来一个例子:

data1=[11,12,13,14,15,16,17,50,60,70,80,90,99]
filtered=filter(lambda x:(x>50),data1)
data2=list(filtered)
print(data2)

mapped=map(lambda x:(x**2),data1)
data3=list(mapped)
print(data3)

分别使用了前两节的filter()函数和map()函数

运行结果如下:

[60, 70, 80, 90, 99]
[121, 144, 169, 196, 225, 256, 289, 2500, 3600, 4900, 6400, 8100, 9801]

若按照filter()函数和map()函数来写如下:

data1=[11,12,13,14,15,16,17,50,60,70,80,90,99]
#提供过滤条件函数
def f1(x):
    return x>50
filtered =filter(f1,data1)
data2=list(filtered)
print(data2)
#map映射函数
def f2(x):
    return x**2
maped=map(f2,data1)
data3=list(maped)
print(data3)

运行结果为:

[60, 70, 80, 90, 99]
[121, 144, 169, 196, 225, 256, 289, 2500, 3600, 4900, 6400, 8100, 9801]

由上对比可以看出lambda()可以使代码看起来更简洁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roy Teng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值