Python reduce()函数用法详解与示例

江岸
江岸
发布时间:2026-10-13| 4人浏览过
原创

本文详解Python内置高阶函数reduce()的用法。介绍其格式reduce(func, seq[, init])及执行流程,通过阶乘和列表求和两个实例说明无init与有init参数的区别。强调func需接收两参数,并对比sum()函数,展示如何利用reduce实现累加与累乘操作。

reduce()是Python内置的一个高阶函数。

reduce()函数

函数格式如下:

reduce(func, seq[, init])

reduce()被称为化简函数,其执行逻辑为:每次迭代时,将上一次迭代的结果(若为首次迭代且未指定init则为序列seq的第一个元素)与序列中的下一个元素共同传入二元函数func中执行。参数init为可选,若提供则作为首次迭代的第一个元素;若未提供,则默认使用seq的第一个元素。

从reduce函数的执行流程可以看出,它非常适合用于计算阶乘。Python标准库中虽未直接提供求阶乘的内置函数,但我们可以利用reduce函数轻松实现这一功能。

#未指定init的情况
>>> n = 6
>>> print reduce(lambda x, y: x * y, range(1, n))
120

在上述示例中,range(1, 6)生成了列表[1, 2, 3, 4, 5],此处将其命名为seq1。由于未指定init参数,reduce()取seq1的第一个元素1作为初始值。因lambda表达式包含两个变量,故需传入两个实参,即取seq1的第二个元素2与初始值1一同传入lambda执行,返回结果2。随后,该结果与seq1的下一个元素3再次传入lambda执行,依此类推,最终得出5! = 120。若希望基于阶乘结果进一步倍增,可启用可选参数init,例如:

>>> print reduce(lambda x, y: x * y, range(1, n),2)
240

此时,init将作为第一个元素,与seq1的第一个元素1一同传入lambda函数执行,返回结果再作为下一次迭代的第一个元素继续计算。

下面的示例更为直观,供参考:

reduce()接收的参数类型与map()类似,均包含一个函数f和一个列表,但行为不同。reduce()传入的函数f必须接收两个参数,并对列表中的每个元素反复调用函数f,最终返回累积结果值。

例如,定义一个函数f,接收x和y并返回它们的和:

def f(x, y):
 return x + y

当调用reduce(f, [1, 3, 5, 7, 9])时,reduce函数的计算过程如下:

首先计算前两个元素:f(1, 3),结果为4; 接着将结果与第3个元素计算:f(4, 5),结果为9; 再将结果与第4个元素计算:f(9, 7),结果为16; 最后将结果与第5个元素计算:f(16, 9),结果为25; 因列表无更多元素,计算结束,返回结果25。

上述计算过程实质上是对列表所有元素求和。尽管Python内置了sum()函数,但使用reduce()同样可以简便地实现求和功能。

reduce()还支持接收第3个可选参数,用于指定计算的初始值。若将初始值设为100,计算方式如下:

reduce(f, [1, 3, 5, 7, 9], 100)

此时结果将变为125,因为第一轮计算变为:

计算初始值与第一个元素:f(100, 1),结果为101。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。