Skip to content

Files

Latest commit

8b65768 · Jun 26, 2020

History

History
98 lines (66 loc) · 1.9 KB

41.md

File metadata and controls

98 lines (66 loc) · 1.9 KB

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模块。 因此,要使用它,必须先按以下步骤导入它:

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 reduce

def do_sum(x1, x2): 
    return x1 + x2

print(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 + x2

def my_reduce(func, seq):
    first = seq[0]
    for i in seq[1:]:
        first = func(first, i)
    return first

print(my_reduce(do_sum, [1, 2, 3, 4])) 

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