原文: https://thepythonguru.com/python-builtin-functions/reduce/
于 2020 年 1 月 7 日更新
reduce()函数接受一个函数和一个序列并返回如下计算的单个值:
- 最初,使用序列中的前两项调用该函数,然后返回结果。
- 然后使用在步骤 1 中获得的结果和序列中的下一个值再次调用该函数。 这个过程一直重复,直到序列中有项目为止。
reduce()函数的语法如下:
语法:reduce(function, sequence[, initial]) -> value
提供initial值时,将使用initial值和序列中的第一项调用该函数。
在 Python 2 中,reduce()是一个内置函数。 但是,在 Python 3 中,它已移至functools模块。 因此,要使用它,必须先按以下步骤导入它:
from functools import reduce # only in Python 3
这是添加列表中所有项目的示例。
>>>>>> from functools import reduce>>>>>> def do_sum(x1, x2): return x1 + x2...>>>>>> reduce(do_sum, [1, 2, 3, 4])10>>>
试试看:
from functools import reducedef do_sum(x1, x2):return x1 + x2print(reduce(do_sum, [1, 2, 3, 4]))
此reduce()调用执行以下操作:
(((1 + 2) + 3) + 4) => 10
前面的reduce()调用在功能上等同于以下内容:
>>>>>> def my_reduce(func, seq):... first = seq[0]... for i in seq[1:]:... first = func(first, i)... return first...>>>>>> my_reduce(do_sum, [1, 2, 3, 4])10>>>
试一试:
def do_sum(x1, x2):return x1 + x2def my_reduce(func, seq):first = seq[0]for i in seq[1:]:first = func(first, i)return firstprint(my_reduce(do_sum, [1, 2, 3, 4]))
但是,reduce()调用比for循环更简洁,并且性能明显更好。
