欢迎访问宙启技术站
智能推送

Python函数式编程-Map、Reduce、Filter、Lambda详解

发布时间:2023-06-08 13:35:26

函数式编程是一种高级编程范式,它强调使用纯函数进行编程,而避免使用带有副作用的过程式代码。Python 作为一门支持面向对象编程和函数式编程的语言,提供了丰富的函数式编程工具。本文将详细介绍 Python 中的函数式编程工具,包括 map、reduce、filter、lambda 等。

一、Map

Map 是 Python 内置的高阶函数,它可以将一个函数应用于一个序列中的每个元素,并将结果存储在一个新序列中。

map(function, iterable, ...)

  # function:将被应用于 iterable 中的每个元素的函数。

  # iterable:一个或多个序列。

  

例如,我们可以使用 map 函数将一个列表中的每个元素都转换为其平方:

num_list = [1, 2, 3, 4, 5]

square_list = list(map(lambda x: x*x, num_list))

print(square_list)

# 输出: [1, 4, 9, 16, 25]

二、Reduce

Reduce 是 Python 内置的高阶函数,它将一个函数应用于序列的每个元素,并返回一个单一的结果。

reduce(function, iterable[, initializer])

  # function:将被应用于 iterable 元素的函数。

  # iterable:序列。

  # initializer:指定第一次调用 function 时传递给函数的参数。

  

例如,我们可以使用 reduce 计算一个整数列表中的和:

from functools import reduce

num_list = [1, 2, 3, 4, 5] 

sum = reduce(lambda x, y: x + y, num_list)

print(sum)

# 输出: 15

如果使用了 initializer 参数,则首先将它传递给 reduce 函数中的 function,然后将其结果与列表中的第一个元素进行比较并计算。

以下是一个示例,演示如何使用 initializer 生成斐波那契数列:

from functools import reduce

fibonacci = reduce(lambda x, _: x + [x[-1] + x[-2]], range(10), [0, 1])

print(fibonacci)

# 输出: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

三、Filter

Filter 是 Python 内置的高阶函数,它接受一个函数和一个序列,并返回一个新的序列,其中包含序列中所有返回为 True 的元素。

filter(function, iterable)

  # function:一个用于筛选 iterable 中元素的函数。

  # iterable:序列。

  

例如,我们可以使用 filter 来筛选一个列表中的所有奇数:

num_list = [1, 2, 3, 4, 5]

odd_list = list(filter(lambda x: x % 2 == 1, num_list))

print(odd_list)

# 输出: [1, 3, 5]

四、Lambda

Lambda 是 Python 中的匿名函数,它允许我们在不声明函数名称的情况下定义函数。

以下是一个示例,演示如何使用 lambda 定义一个具有离散差分的函数:

delta = lambda x, y: y - x 

print(delta(5, 10))

# 输出: 5

Lambda 函数通常用于函数式编程中的映射、筛选和归约等操作。例如,我们可以将上面的示例与 map 函数结合使用,以计算列表中相邻元素之间的差异:

num_list = [1, 3, 6, 10, 15]

diff_list = list(map(lambda x: delta(x[0], x[1]), zip(num_list, num_list[1:])))

print(diff_list)

# 输出: [2, 3, 4, 5]

结论

Python中的函数式编程工具提供了灵活、强大和简洁的方式来对序列执行映射、过滤、归约等操作。这些工具不仅可以使代码简短易懂,而且具有通用性和可重用性。因此,在进行函数式编程时,这些工具是不可或缺的。