匿名函数与高阶函数
一、匿名函数lambda的定义:
f = lambda 参数:返回值
f = lambda x, y: x + y
我们对比常规的函数定义:
def add(x, y): print("this is add") return x + y
我们可以看到二者的区别:
1,匿名函数是没有函数的,而常规的函数有函数名。
2,匿名函数只有传参与返回值,而常规函数可以有其他语句或模块。
二、lambda的实质及调用
f = lambda x, y: x + y print(f)
执行结果:
<function <lambda> at 0x000001BC865661F0>
调用lambda函数可以用()来调用:
f = lambda x, y: x + y print(f(3, 4))
执行结果: 7
三、匿名函数的应用场景
lambda函数通常与高阶函数配合使用,可以大大简化代码。
sorted()
my_list = [1, 3, 5, 6, 0, 23, 2] my_list_dict = [{"name": "tom", "age": 18}, {"name": "jerry", "age": 22}, {"name": "lucy", "age": 30}, {"name": "jordan", "age": 24} ] l = sorted(my_list_dict, key=lambda x: x["age"], reverse=True) print(l)
执行结果:
[{'name': 'lucy', 'age': 30}, {'name': 'jordan', 'age': 24}, {'name': 'jerry', 'age': 22}, {'name': 'tom', 'age': 18}]
我们可以看到,对my_list_dict进行排序时,是根据age键对应的值排序。
map():
my_list = [1, 3, 5, 6, 0, 23, 2] s = map(lambda x: x**2, my_list) print(type(s)) print(list(s))
执行结果:
<class 'map'> [1, 9, 25, 36, 0, 529, 4]
map():映射。 对传入的可迭代对象进行批量同操作处理。
map第一个参数为 function,后面可以跟多个可迭代对象。
reduce():
from functools import reduce l = [1, 3, 4, 22, 0, 2] s = reduce(lambda x, y: x + y, l) print(s)
reduce():规约,会对可传入的序列进行逐个运算。
执行结果:32
filter():
l = [1, 3, 4, 22, 0, 2] s = filter(lambda x: x % 2 == 0, l) print(list(s))
执行结果:
[4, 22, 0, 2]
高阶函数对于数据的处理,提取有一定优势,需要好好掌握