基本上,lambdas以及map,reduce和filter为python提供了函数式编程能力。让我们看看他们是什么。
- map: map函数采用 iterable(list,tuple,set)并将函数应用于列表中的每个元素。让我们看一个例子来看看它是如何工作的。
任务1:给定一个整数列表,编写代码,以方的所有数s在列表中。
def func (num ):
“””
对给定数字进行平方的函数
“””
return num * num
l = [1, 2, 3, 4, 5, 6]
#map采用一个函数并应用于
#列表中的每个元素
ans = list (map (func ,l ))
#[1,4,9,16,25,36]
print(ans)
上面的代码工作并执行我们想要实现的内容,但我们可以使用lambda函数以更简洁的方式编写它,而不是创建单独的函数。让我们稍微改变一下代码,使其更简洁。
l = [1, 2, 3, 4, 5, 6]
#[1,4,9,16,25,36]
ans = list (map (lambda x :x * x ,l ))
print(ans)
任务2:给定一个整数列表,编写一个代码来均数偶数,但将奇数数字排成一行。这里我们可以一起使用map和lambda,如下所示
l = [1, 2, 3, 4, 5, 6]
ans = list(map(lambda x: x ** 2 if x % 2 == 0 else x ** 3, l))
print(ans)
这总结了地图的基本工作。我们来看看过滤器
- filter:它的工作原理类似于map函数。顾名思义,它用于根据特定条件过滤元素。不同之处在于它从列表中的元素创建满足某些条件的新列表。让我们看看它如何与一个例子一起工作。这些参数类似于地图的参数。它需要一个谓词函数和一个可迭代函数。
任务3:给定一个整数列表,编写一个代码,仅从列表中分隔偶数。
l = [1, 2, 3, 4, 5, 6]
#只保留满足谓词功能的列表元素
ans = list(filter(lambda x: x % 2 == 0, l))
# [2, 4, 6]
print(ans)
- reduce:它继续在列表中应用函数,直到它返回单个值。让我们通过一个例子来看看reduce的工作
任务4:给定一个整数列表,编写一个代码,返回通过乘以列表中的元素获得的总值。
from functools import reduce
l = [1, 2, 3, 4, 5, 6]
ans = reduce(lambda x, y: x * y, l)
print(ans)
笔记:
map和 filter返回一个map对象,而 reduce返回一个值。
我们必须从functools导入reduce,但map和filter可直接在builtins中使用