Pular para o conteúdo

Como Usar a Redução em Python?

[

Python’s reduce(): De Funcional para Estilo Pythonico

Introdução

O reduce() do Python é uma função que implementa uma técnica matemática chamada de dobramento ou redução. É útil quando você precisa aplicar uma função a um iterável e reduzir a um único valor cumulativo. O reduce() do Python é popular entre os desenvolvedores com um histórico de programação funcional, mas o Python tem mais a oferecer.

Neste tutorial, você aprenderá como o reduce() funciona e como usá-lo de forma eficaz. Você também conhecerá algumas ferramentas alternativas do Python que podem ser mais pythonicas, legíveis e eficientes do que o reduce().

Funcional Programming em Python

A programação funcional é um paradigma de programação baseado na decomposição de um problema em um conjunto de funções individuais. Idealmente, cada função possui apenas um conjunto de argumentos de entrada e produz uma saída.

Na programação funcional, as funções não possuem nenhum estado interno que afete a saída que produzem para uma determinada entrada. Isso significa que sempre que você chamar uma função com o mesmo conjunto de argumentos de entrada, obterá 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 mudanças de estado o máximo possível. Ela trabalha com os dados que fluem entre as funções.

Outras características principais da programação funcional incluem:

  • O uso de recursão em vez de loops ou outras estruturas como uma estrutura de controle de fluxo primária.
  • Uma ênfase no processamento de listas ou arrays.
  • Uma ênfase no que deve ser calculado, em vez de como calculá-lo.
  • O uso de funções puras.

Como o reduce() do Python funciona?

O reduce() faz parte do módulo functools do Python. Ele recebe duas entradas obrigatórias: uma função de dois argumentos e um iterável. A função reduz o iterável cumulativamente aplicando a função de dois argumentos a cada item consecutivo do iterável.

O resultado é um único valor reduzido que é devolvido como saída. Aqui está a sintaxe básica do reduce():

import functools
result = functools.reduce(function, iterable)

Casos de uso comuns de redução

Agora que você entende como o reduce() funciona, vamos explorar alguns casos de uso comuns:

Somando valores numéricos

import functools
numbers = [1, 2, 3, 4, 5]
sum = functools.reduce(lambda x, y: x + y, numbers)
print(sum) # Output: 15

Multiplicando valores numéricos

import functools
numbers = [1, 2, 3, 4, 5]
product = functools.reduce(lambda x, y: x * y, numbers)
print(product) # Output: 120

Encontrando o valor mínimo e máximo

import functools
numbers = [17, 3, 52, 11, 8]
minimum = functools.reduce(lambda x, y: x if x < y else y, numbers)
maximum = functools.reduce(lambda x, y: x if x > y else y, numbers)
print(minimum) # Output: 3
print(maximum) # Output: 52

Verificando se todos os valores são verdadeiros

import functools
values = [True, True, True, True]
all_true = functools.reduce(lambda x, y: x and y, values)
print(all_true) # Output: True

Verificando se algum valor é verdadeiro

import functools
values = [False, False, True, False]
any_true = functools.reduce(lambda x, y: x or y, values)
print(any_true) # Output: True

Considerando desempenho e legibilidade

Ao usar o reduce() do Python, é importante considerar o desempenho e a legibilidade do código.

O desempenho é chave

Devido ao fato de o reduce() iterar sobre o iterável item por item, a função de redução pode ser executada muitas vezes. Em casos de grandes quantidades de dados, isso pode levar a um desempenho baixo. Em tais situações, pode ser preferível usar estruturas de dados e operações do Python mais otimizadas, como list comprehension ou funções nativas como sum() e max().

A legibilidade conta

Embora o reduce() seja poderoso, ele pode não ser tão claro quanto outras construções do Python. Em alguns casos, pode ser mais legível e mais pythonico usar estruturas de controle de fluxo como loops for ou funções nativas, como sum() e max().

Conclusão

O reduce() do Python é uma função útil quando você precisa reduzir um iterável a um único valor cumulativo. No entanto, o Python oferece outras ferramentas mais pythonicas, legíveis e eficientes para resolver esses tipos de problemas. Ao entender o funcionamento do reduce() e conhecer as alternativas disponíveis, você poderá escolher a melhor abordagem para resolver problemas de redução ou dobra no Python.

Baixe gratuitamente um capítulo do livro “Python Tricks” que apresenta as melhores práticas do Python com exemplos simples que você pode aplicar imediatamente para escrever um código mais bonito e pythonico.

Referências