Python中的reduce()函数

146 阅读3分钟

在这篇文章中,我们要看一下Python中一个非常重要的函数,叫做reduce()。

当我们编写某种程序时,我们会遇到各种情况,当我们需要得到某种数学上的总数或累积值时,要使用这个结果并做一些事情。

比方说,我们有一个电子商务网站,我们的购物车里有商品和商品价格,我们想计算总金额,以便客户可以下订单。那么,reduce()函数 可以帮助我们计算出这个总数,从而将一串数值减少到一个单一的数值。

还有一件重要的事情要记住,reduce()函数并不是作为Python内置函数的一部分出现的。 当我们下载 Python 解释器和 Python 包时,functools就是我们所说的工具带,我们可以使用 python 安装时附带的功能工具,从那里我们要把 reduce 函数作为一个模块导入。

functools 模块是为高阶函数服务的,它作用于或返回其他函数,在我们的例子中,它为我们提供了 reduce 函数。

让我们通过一些代码例子来更好地了解reduce() 函数。

在Python中实现Reduce函数

首先,我们需要从functools 模块中导入 reduce 函数

from functools import reduce

声明一个数字列表,用它进行计算

my_prices = [40, 50, 60]

让我们为我们的计算定义一个函数

def calc_total(acc, eachItem):
    return acc + eachItem


解释一下。我们为我们的函数提供了两个参数,acc 或累积值,以及eachItem,当我们将在我们的列表中进行迭代时,我们将其作为一个变量。别担心,我们会再来讨论累积值,以更好地理解它的用途。

实现reduce()函数:

total = reduce(calc_total, my_prices, 0)

reduce函数总共需要3个参数

  1. 第一个是我们在代码前面定义的函数。
  2. 第二个是值的列表或我们的序列,我们想用它来执行我们的操作,也是之前定义的。
  3. 第三个参数0,是初始值累积值,从技术上讲,它的默认值是0,在我们的例子中,它工作得很好,但在更复杂的操作中,如果我们想要一个初始值,比如说1,那么它必须被定义为第三个参数,计算将以1作为操作的起始值。

解释一下:reduce()函数从初始累积值(0)开始,接收我们的函数(calc_total),并通过迭代所有项目使用数字列表(my_prices) ,并保持所执行函数的每次迭代的累积值,并返回最终结果。

现在,我们的代码已经就位,让我们打印出结果吧

print(f"The summation for the list is {total}")

输出:

The summation for the list is 150

完整的代码

# Import reduce
from functools import reduce

# Declare a list
my_prices = [40, 50, 60]

# Define our function
def calc_total(acc, eachItem):
    return acc + eachItem

# Use reduce(function_name, data, initial_value)
total = reduce(calc_total, my_prices, 0)

# Print the result
print(f"The summation for the list is {total}")

总结

我们看到,我们的代码正如我们预期的那样工作。我们得到的总和是150。这就是减少()函数在Python中的工作原理。它不仅在Python中是一个非常重要的函数,而且在大多数其他编程语言中也是如此。reduce函数的基本概念和用例在所有语言中都是一样的,因此值得好好了解一下。