一、简介
有时候在使用函数的时候不需要给函数分配一个名称,该函数就是匿名函数。在Python中使用lambda表达式表示匿名函数。
语法:
lambda 参数列表: lambda体
lambda是关键字声明,在lambda表达式中,参数列表相当于函数的参数列表,不需要小括号括起来。冒号后面是lambda体,类似于函数体。
提示:lambda体不能是一个代码块,不能包含多条语句,只能包含一条语句,该语句会返回结果给lambda表达式,与函数不同的是不需要return返回。
二、lambda表达式和def函数的区别
1.lambda可以立刻传递,自动返回结果。
2.lambda在内部只能包含一行代码。
3.lambda是一个为编写简单的函数设计的,而def函数用来处理更大的任务。
4.lambda可以定义一个匿名函数,而def函数必须有一个名字。
三、简单案例
无参数lambda:
# 普通def函数
def show():
return 'hello'
print(show())
# lambda表达式
show_lambda = lambda: 'hello'
print(show_lambda())
输出:
hello
hello
带参数lambda:
# 普通def函数
def add(x, y):
return x + y
print(add(3, 4))
# lambda表达式
add_lambda = lambda x, y: x + y
print(add_lambda(3, 4))
输出:
7
7
四、map方法使用
遍历序列,对序列中的每个元素进行操作,最终获得新的序列。
# 普通def函数
def add(a):
return a ** 2
x = map(add, [1, 2, 3, 4, 5])
print(list(x))
# lambda表达式
y = map(lambda x: x ** 2, [1, 2, 3, 4, 5])
print(list(y))
输出:
[1, 4, 9, 16, 25]
[1, 4, 9, 16, 25]
map函数的第一个参数是一个lambda表达式,第二个就是需要作用的对象,返回是一个map对象,需要手动转换类型。
五、filter方法使用
对序列中的元素进行筛选,最终获得符合条件的序列。
# 普通def函数
def check(num):
if num % 2 == 0:
return num
filter_list = filter(check, [1, 2, 3, 4, 5])
print(list(filter_list))
# lambda表达式
lambda_list = filter(lambda num: num % 2 == 0, [1, 2, 3, 4, 5])
print(list(lambda_list))
输出:
[2, 4]
[2, 4]
六、reduce方法使用
对序列所有元素进行累计操作。
from functools import reduce
# 普通def函数
def sum(x, y):
return x + y
sum1 = reduce(sum, [1, 2, 3, 4, 5])
print(sum1)
# lambda表达式
lambda_sum = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])
print(lambda_sum)
输出:
15
15
七、总结
1.lambda只是一个表达式,不是代码块,只包含一行代码。
2.对于复杂函数最好不要使用lambda表达式,会增加代码阅读难度。