





















Python 对函数式编程(Functional Programming, FP)提供了良好的支持。它是一种编程范式,核心思想是将计算过程视为一系列数学函数的求值,并避免使用可变状态和副作用。
纯函数式语言(如 Haskell)要求极高的纯洁性,而 Python 是一门多范式语言,它的函数式编程风格更灵活务实:鼓励使用纯函数,但不强制。一个函数在内部仍可使用局部变量,只要不修改全局变量或产生其他副作用即可。
Python 提供了一系列内置函数和标准库,用于支持函数式编程风格。
map(function, iterable)
function 依次作用于 iterable 的每个元素,并返回一个包含所有结果的迭代器。numbers = [1, 2, 3, 4, 5]
doubled = map(lambda x: x * 2, numbers)
print(list(doubled)) # 输出: [2, 4, 6, 8, 10]
filter(function, iterable)
function 测试 iterable 的每个元素,并返回一个只包含测试结果为 True 的元素的迭代器。numbers = [1, 2, 3, 4, 5]
evens = filter(lambda x: x % 2 == 0, numbers)
print(list(evens)) # 输出: [2, 4]
reduce(function, iterable)
function(接收两个参数)累积地应用到 iterable 的元素上,从而将序列归约为一个单一的值。reduce() 不再是内置函数,需要从 functools 模块导入。from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # 输出: 120
lambda 关键字用于创建匿名的、单行的小型函数。它常与 map()、filter() 等高阶函数配合使用,使代码更简洁。
# 一个简单的 lambda 函数,计算平方
square = lambda x: x ** 2
print(square(5)) # 输出: 25
map 和 filter 功能的更 Pythonic、更易读的方式。例如,[x*2 for x in numbers] 等价于 list(map(lambda x: x*2, numbers))。sorted():这是一个高阶函数,因为它可以接受一个 key 函数来自定义排序逻辑。@lru_cache)。functools.partial 可以固定原函数的某些参数,从而创建一个新的、更简单的函数。itertools:提供了大量用于高效操作迭代器的工具,这些工具大多基于惰性计算,能处理无限数据流且节省内存。主要功能包括:
count(), cycle(), repeat()。product(), permutations(), combinations()。chain(), groupby(), islice()。functools:提供了一系列用于高阶函数操作的工具。
reduce():如前所述,用于归约操作。partial():用于创建偏函数。@lru_cache:一个装饰器,用于缓存函数的调用结果,优化递归等重复计算。operator:提供了对应 Python 内置运算符的函数,如 operator.add(加法)、operator.mul(乘法)等。使用它们可以避免编写很多简单的 lambda 函数,使代码更简洁。在 Python 中应用函数式编程时,不必追求纯粹,关键是“取其精华”:
map 和 filter 操作,优先考虑使用列表、字典或集合推导式,它们通常更清晰。itertools 和 functools,它们是进行函数式编程的利器。for 循环有时比复杂的 reduce 更容易理解。根据任务选择最自然、最可读的方式。在大型项目中,不同部分可以采用不同范式。总而言之,Python 的函数式编程是一种强大的编程范式,通过 map、filter、reduce 等核心函数,以及 itertools、functools 等标准库支持,能显著提升代码的简洁性、可读性和健壮性。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。