python的函数中最常见的是用def关键词定义的有名称的函数,例如all()函数,all就是其函数名,除此之外还可以定义匿名函数,所谓匿名函数,就是没有名称的函数,用lambda关键字来定义,其语法如下:
lambda 参数列表: 函数体
其中,参数列表
与有名称函数的参数列表是一样的,只是不需要用小括号括起来;:
为英文半角冒号;函数体
只有一个语句,不能包含多条语句,且会将该语句计算的结果返回给lambda()函数。
lambda()函数与常见的有名称函数的不同点是,lambda()函数不需要return语句返回;相同点是,都属于函数类型,例如add()和sub()等一条语句就可以实现其功能的函数都可以被lambda()函数替代:
# 加法函数
def add(a,b):
return a+b
# 减法函数
def sub(a,b):
return a-b
# 加减法函数
def AddOrSub (x):
if x == '+':
return lambda a, b: (a+ b) # 替代add()函数
else:
return lambda a, b: (a- b) # 替代sub()函数
f1 = AddOrSub('+')
f2 = AddOrSub('-')
print("10 + 5 = {0}".format(f1(10,5)))
print("10 - 5 = {0}".format(f2(10,5)))
lambda()函数可以减少代码量,还常常与filter()和map()等函数配合使用,先介绍一下filter()函数和map()函数的使用示例:
data = [25, 17, 38, 90, 80, 76, 43]
# 提供过滤条件的filter()函数
def f(x):
return x > 30 #找出大于30的元素
filtered = filter(f, data)
data1 = list(filtered) # 转换为列表
print(data1)
# 提供变换规则的map()函数
def m(x):
return x * 10 # 变换规则乘以10
mapped = map(m ,data)
data2 = list(mapped) # 转换为列表
print(data2)
将上述代码使用lambda()函数代替:
data = [25, 17, 38, 90, 80, 76, 43]
filtered = filter(lambda x: (x> 30), data)
data1 = list(filtered)
print(data1)
mapped = map(lambda x: (x* 10), data)
data2 = list(mapped)
print(data2)