在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()可以使代码看起来更简洁。