函数式编程:map、filter、reduce和Python中的lambda函数
函数式编程(Functional Programming)是一种编程范式,与命令式编程(Imperative Programming)相对应。函数式编程的主要思想是将计算视为数学中函数的计算,强调函数的“纯洁性”,也就是一个函数的结果只依赖于输入参数,与外部环境无关。这种思想使得函数式编程能够更好地应对并行计算、代码复用等问题。
在函数式编程中,一些函数被广泛使用,如map、filter、reduce等。它们是函数式编程中的“高阶函数”,也就是能够接收函数作为参数或返回函数的函数。在Python中,可以使用lambda函数来定义这些函数。
1. map函数
map函数接收一个函数f和一个可迭代对象(列表、元组、字符串等),将函数f作用于可迭代对象的每一个元素,将结果组成一个新的可迭代对象返回。map函数的语法如下:
map(function, iterable, ...)
其中,function为函数,iterable为可迭代对象。下面是一些示例:
a = [1, 2, 3, 4, 5]
b = list(map(lambda x : x * 2, a))
print(b) # [2, 4, 6, 8, 10]
s = ['apple', 'banana', 'cherry']
ss = list(map(lambda x : x.upper(), s))
print(ss) # ['APPLE', 'BANANA', 'CHERRY']
2. filter函数
filter函数接收一个函数f和一个可迭代对象(列表、元组、字符串等),将函数f作用于可迭代对象的每一个元素,仅保留返回值为True的元素,将它们组成一个新的可迭代对象返回。filter函数的语法如下:
filter(function, iterable, ...)
其中,function为函数,iterable为可迭代对象。下面是一些示例:
a = [1, 2, 3, 4, 5]
b = list(filter(lambda x : x % 2 == 0, a))
print(b) # [2, 4]
s = ['apple', 'banana', 'cherry']
ss = list(filter(lambda x : 'a' in x, s))
print(ss) # ['apple', 'banana']
3. reduce函数
reduce函数接收一个函数f和一个可迭代对象(列表、元组、字符串等),将函数f作用于可迭代对象的前两个元素,将结果继续作为 个参数,再作用于下一个元素,直到所有元素都被处理完,返回最终结果。reduce函数的语法如下:
reduce(function, iterable[, initializer])
其中,function为函数,iterable为可迭代对象,initializer为可选参数,表示初始值。如果没有初始值,则从 个元素开始。reduce函数需要从functools模块中导入。下面是一个示例:
from functools import reduce
a = [1, 2, 3, 4, 5]
b = reduce(lambda x, y : x + y, a)
print(b) # 15
4. lambda函数
lambda函数也称为匿名函数,即没有名称的函数。它通常用来定义一些简单的函数,以便更方便地在高阶函数中使用。lambda函数的语法如下:
lambda arguments : expression
其中,arguments为参数,expression为表达式,可以使用这些参数计算值。下面是一些示例:
f = lambda x : x * 2
print(f(3)) # 6
g = lambda x, y : x + y
print(g(1, 2)) # 3
总的来说,函数式编程中的map、filter、reduce和lambda函数是非常实用和重要的工具。它们可以帮助我们更清晰地组织代码,减少重复代码的出现,提高代码的可读性、可维护性和复用性。
