- 使用关键字lambda的表达式 ,
- 所谓的匿名 ,也就是没有函数名字,也就不需要def去定义函数 。
- 匿名函数的参数规则 、返回值都和普通函数是一样的 。
lambda [arg1 [,arg2, ... argN]] : expression
通过以上我们可以将上面的匿名函数总结为 :lambda + 参数列表 + 执行表达式
比如: >>> lambda a,b : a * 10 + b
其中冒号之前的a,b就是参数 ,可以是一个也是可以多个, 也就是上面的参数列表 ;而a * 10 +b 就是这个函数的表达式 ,而这个表达式最终也会作为返回值返回 ,注意:这里不需要return .
>>> x = lambda a, b: a * 10 + b
>>> x(2,3)
23
# 这个匿名函数就相当于:
def x(a,b):
return a * 10 + b
比较
如果你还是不太理解上面的意思,我们通过一张图来解释它们的关系 。
我们知道,在普通函数的参数有多种表示形式,如位置参数,默认参数,关键字参数以及可变参数 ,那么在lambda是否也支持这样的表示形式呢 ?
实例在本例中我们就来探究普通函数中的位置参数,默认参数,关键字参数以及可变参数 是否也在lambda中适用。
1.位置参数
# 1. 位置参数
def add1(a,b):
return a + b
x = lambda a,b : a + b
print("add1函数返回:{}".format(add1(3,5)))
print("匿名函数返回:{}".format(x(3,5)))
print("*" * 30)
#输出结果:
add1函数返回:8
匿名函数返回:8
******************************
#说明 :最基本的位置参数肯定是支持的 。
2.默认参数
# 2.默认参数
def add2(a,b=10):
return a + b
y = lambda a,b=10 : a+b
print("add2函数默认值赋值返回:{}".format(add2(1,5)))
print("匿名函数默认值赋值返回:{}".format(y(1,5)))
print("*" * 30)
print("add2函数走默认值返回:{}".format(add2(1)))
print("匿名函数走默认值返回:{}".format(y(1)))
#输出结果:
dd2函数默认值赋值返回:6
匿名函数默认值赋值返回:6
******************************
add2函数走默认值返回:11
匿名函数走默认值返回:11
#说明:通过上面的示例可以看到,匿名函数也是支持参数设置默认值的。
3.关键字参数
# 3. 关键字参数
def add3(a,b):
return a + b
z = lambda a,b : a+b
print("*" * 30)
print("add3为关键字函数返回:{}".format(add3(b='3.6.8',a='python')))
print("匿名函数设置关键字函数返回:{}".format(z(b='3.6.8',a='python')))
#输出结果:
add3为关键字函数返回:python3.6.8
匿名函数设置关键字函数返回:python3.6.8
******************************
#说明:匿名参数也可以按照关键字参数方式进行传递
4.可变参数
# 4.可变化函数
def add4(a,*args):
return a + sum(args)
zz = lambda a,*args : a + sum(args)
print("*" * 30)
print("add4为可变函数返回:{}".format(add4(1,2,3,4)))
print("匿名函数设置可变函数返回:{}".format(zz(1,2,3,4)))
#输出结果:
add4为可变函数返回:10
匿名函数设置可变函数返回:10
******************************
#说明:匿名函数同样也支持可变化参数的传递
总结
- lambda是单个表达式,不是一个代码块,所以它只能满足简单函数的使用场景,仅能处理一些简单逻辑,若需要处理复杂逻辑,还的使用普通函数 。
- 当然如果你函数逻辑本身就简单,使用它会简化代码,同时也不用为了函数重名问题烦恼