匿名函数
lambda 表达式必须使用 lambda 关键字定义;lambda关键字后面与冒号前面是参数列表,多个参数用逗号分隔,冒号右边是 lambda 表达式的返回值。
lambda 表达式一般用于无需多次使用的函数,并且该函数使用完毕就释放了所占用的空间。
一、语法格式:
lambda [arg1[, arg2, arg3, ...., argN]]: expression
二、lambda 表达式与 def 定义函数的区别:
1. lambda 表达式没有函数名,def 定义函数有函数名;
2. lambda 表达式的冒号后面只能有一个表达式,否则会出现错误;
3. for 语句不能用在 lambda 表达式中,即 lambda 表达式不能包含复杂语句;
4. lambda 表达式不能共享给别的程序调用;
5. lambda 表达式可以作为其它数据类型的值。
my_list = [lambda a: a**2, lambda b: b**2]
fun = my_list[0]
print(fun(2))
# 输出结果:
#
# 4
三、lambda 表达式应用场景:
1. 将 lambda 表达式赋值给一个变量,然后调用这个变量:
fun = lambda a: a**2
print(fun(2))
# 输出结果:
#
# 4
2. 将 lambda 表达式赋值给其他函数,从而替换其他函数功能:一般这种情况是为了屏蔽某些功能,例如,可以屏蔽内置 sorted() 函数:
sorted = lambda *args:None
x = sorted([3,2,1])
print(x)
# 输出结果:
#
# None
3. 将 lambda 表达式作为参数传递给其他函数:
my_list = [(1, 2), (3, 1), (4, 0), (11, 4)]
my_list.sort(key=lambda x: x[1])
print(my_list)
# 输出结果:
#
# [(4, 0), (3, 1), (1, 2), (11, 4)]
· 该式子表示依据列表中每个元素的第二项进行排序。
4. 将 lambda 表达式应用在 filter、map、reduce 等高阶函数中。
5. 将 lambda 表达式应用在函数的返回值里面。
def fun(n):
return lambda x:x+n
new_fun = fun(2)
print(new_fun)
# 输出结果:
#
# <function fun.<locals>.<lambda> at 0x000001B7C370DD38>
· 函数的返回值也是一个函数。
· 上述代码中,lambda 表达式实际是定义在某个函数内部的函数,称之为嵌套函数,或者内部函数。
· 将包含嵌套函数的函数称之为外部函数。
· 内部函数能够访问外部函数的局部变量,此特性为闭包编程基础。
· Python 中所有的函数都可以当做参数传递。
· 当有一个满足要求的函数时,没必要额外使用 lambda 表达式。