Python reduce()函数

原文: https://thepythonguru.com/python-builtin-functions/reduce/


于 2020 年 1 月 7 日更新


reduce()函数接受一个函数和一个序列并返回如下计算的单个值:

  1. 最初,使用序列中的前两项调用该函数,然后返回结果。
  2. 然后使用在步骤 1 中获得的结果和序列中的下一个值再次调用该函数。 这个过程一直重复,直到序列中有项目为止。

reduce()函数的语法如下:

语法reduce(function, sequence[, initial]) -> value

提供initial值时,将使用initial值和序列中的第一项调用该函数。

在 Python 2 中,reduce()是一个内置函数。 但是,在 Python 3 中,它已移至functools模块。 因此,要使用它,必须先按以下步骤导入它:

  1. from functools import reduce # only in Python 3

这是添加列表中所有项目的示例。

  1. >>>
  2. >>> from functools import reduce
  3. >>>
  4. >>> def do_sum(x1, x2): return x1 + x2
  5. ...
  6. >>>
  7. >>> reduce(do_sum, [1, 2, 3, 4])
  8. 10
  9. >>>

试试看:

  1. from functools import reduce
  2. def do_sum(x1, x2):
  3. return x1 + x2
  4. print(reduce(do_sum, [1, 2, 3, 4]))

reduce()调用执行以下操作:

  1. (((1 + 2) + 3) + 4) => 10

前面的reduce()调用在功能上等同于以下内容:

  1. >>>
  2. >>> def my_reduce(func, seq):
  3. ... first = seq[0]
  4. ... for i in seq[1:]:
  5. ... first = func(first, i)
  6. ... return first
  7. ...
  8. >>>
  9. >>> my_reduce(do_sum, [1, 2, 3, 4])
  10. 10
  11. >>>

试一试:

  1. def do_sum(x1, x2):
  2. return x1 + x2
  3. def my_reduce(func, seq):
  4. first = seq[0]
  5. for i in seq[1:]:
  6. first = func(first, i)
  7. return first
  8. print(my_reduce(do_sum, [1, 2, 3, 4]))

但是,reduce()调用比for循环更简洁,并且性能明显更好。