Pular para o conteúdo

Como usar a função reduce do Python?

[

Python’s reduce(): Do Funcional ao Estilo Pythonico

Python’s reduce() é uma função que implementa uma técnica matemática chamada fold ou redução. O reduce() é útil quando você precisa aplicar uma função a um iterável e reduzi-lo a um único valor acumulativo. O reduce() do Python é popular entre os desenvolvedores com um background em programação funcional, mas o Python oferece mais do que isso.

Neste tutorial, você aprenderá:

  • Como o reduce() do Python funciona
  • Quais são os casos mais comuns de redução
  • Como resolver esses casos de uso usando o reduce()
  • Quais ferramentas alternativas do Python estão disponíveis para resolver esses mesmos casos de uso

Com esse conhecimento, você poderá decidir quais ferramentas usar quando se trata de resolver problemas de redução ou dobramento em Python.

Explorando a Programação Funcional em Python

Na programação funcional, as funções não têm nenhum estado interno que afeta a saída que elas produzem para uma determinada entrada. Isso significa que sempre que você chama uma função com o mesmo conjunto de argumentos de entrada, você obtém o mesmo resultado ou saída.

Em um programa funcional, os dados de entrada fluem por um conjunto de funções. Cada função opera em sua entrada e produz alguma saída. A programação funcional tenta evitar tipos de dados mutáveis ​​e alterações de estado o máximo possível. Ela trabalha com os dados que fluem entre as funções.

Outros recursos básicos da programação funcional incluem:

  • Um foco no processamento de listas ou arrays
  • Um foco no que deve ser calculado, em vez de como calculá-lo
  • O uso de funções puras que não têm efeitos colaterais

Python suporta a programação funcional e oferece várias ferramentas e funções que são úteis para trabalhar com esse paradigma.

Como o reduce() do Python Funciona

A função reduce() está localizada no módulo functools do Python. Para usá-la, é necessário importar esse módulo. O reduce() recebe dois argumentos obrigatórios: uma função e um iterável. A função fornecida deve ser uma função de dois argumentos, ou seja, ela deve receber dois valores de entrada e retornar um valor de saída. O reduce() aplica a função a pares consecutivos de elementos do iterável, acumulando o resultado a cada passo.

No entanto, é importante ressaltar que o reduce() está disponível apenas nas versões 2.x do Python. Nas versões 3.x, ele foi movido para o módulo functools e é recomendado usar a função reduce() a partir desse módulo. Para importar o reduce() do functools, você pode usar o seguinte código:

from functools import reduce

Os Argumentos Obrigatórios: função e iterável

Para usar o reduce(), você precisa fornecer uma função e um iterável. A função deve receber dois argumentos e retornar um valor. O iterável é uma coleção de elementos nos quais você deseja aplicar a função.

A função reduce() aplicará a função fornecida aos pares consecutivos de elementos do iterável, acumulando o resultado a cada iteração e retornando o resultado final.

Por exemplo, vamos supor que você tenha uma função soma() que recebe dois números e retorna a soma deles. Você pode usar o reduce() para aplicar essa função a uma lista de números e obter a soma total. Aqui está um exemplo:

from functools import reduce
def soma(a, b):
return a + b
numeros = [1, 2, 3, 4, 5]
resultado = reduce(soma, numeros)
print(resultado) # Output: 15

Nesse exemplo, a função reduce() aplicou a função soma() aos pares consecutivos de números na lista [1, 2, 3, 4, 5], acumulando o resultado a cada iteração. O resultado final é a soma total dos números na lista.

O reduce() pode ser usado com qualquer função que receba dois argumentos e retorne um valor. Isso significa que você pode usar funções pré-definidas do Python, como max(), min(), mul() e muitas outras, em conjunto com o reduce() para obter o resultado desejado.

O Argumento Opcional: valor inicial

O reduce() também aceita um argumento opcional chamado valor inicial (ou initializer). Esse valor inicial será usado como o primeiro argumento na primeira chamada da função.

Se você fornecer um valor inicial, o reduce() começará a aplicar a função fornecida aos pares consecutivos de elementos do iterável, usando o valor inicial como o primeiro argumento. Se você não fornecer um valor inicial, o reduce() usará o primeiro e o segundo elementos do iterável como os primeiros argumentos da função.

Aqui está um exemplo que usa o valor inicial no reduce():

from functools import reduce
def multiplicacao(a, b):
return a * b
numeros = [1, 2, 3, 4, 5]
resultado = reduce(multiplicacao, numeros, 2)
print(resultado) # Output: 240

Nesse exemplo, a função reduce() aplicou a função multiplicacao() aos pares consecutivos de números na lista [1, 2, 3, 4, 5], começando com o valor inicial de 2. Isso significa que o primeiro argumento da função multiplicacao() será 2 e o segundo argumento será 1. O reduce() continuará a aplicar a função multiplicacao() aos pares consecutivos de números, acumulando o resultado a cada iteração. O resultado final é o produto total dos números na lista multiplicado pelo valor inicial.

Se você não fornecer um valor inicial no reduce(), o primeiro e o segundo elementos do iterável serão usados como os primeiros argumentos da função. Aqui está um exemplo:

from functools import reduce
def multiplicacao(a, b):
return a * b
numeros = [1, 2, 3, 4, 5]
resultado = reduce(multiplicacao, numeros)
print(resultado) # Output: 120

Nesse exemplo, o reduce() começou aplicando a função multiplicacao() aos pares consecutivos [1, 2], usando 1 como o primeiro argumento e 2 como o segundo argumento. O reduce() continuou aplicando a função aos pares consecutivos restantes, acumulando o resultado a cada iteração. O resultado final é o produto total dos números na lista.