La funzione reduce() in python permette di far eseguire un'operazione ad ogni elemento iterabile inserito. Diversamente da python 2, reduce() non è più una funzione integrata in python 3 e la troviamo nel modulo functools.

Perciò solamente in python 3, per utilizzare reduce(), dovremmo importarlo nel modo seguente:

from functools import reduce

Come funziona

Sintassi : functools.reduce(f, elemento_iterabile, [valore_iniziale]) dove valore_iniziale è un intero opzionale(se omesso è zero), mentre f deve:

  • essere una funzione;
  • avere esattamente due parametri;
  • ritornare solamente un valore.

functools.reduce() inizialmente prende i primi due valori dall'elemento iterabile e li manda in pasto alla funzione dichiarata, successivamente verranno passati ad essa il risultato ottenuto dall'ultima operazione eseguita, più il prossimo valore dell'elemento.

Esempi

Ecco un esempio giusto per chiarirvi le idee:

from functools import reduce

def moltiplica_elementi(elemento1, elemento2):
return elemento1 * elemento2

lista = [1, 2, 3, 4, 5]
risultato = reduce(moltiplica_elementi, lista)

print(risultato)
#output
120

Analizziamo le operazioni effettuate per ottenere 120:

Inizialmente vengono passati a moltiplica_elementi()i primi due valori della lista: 1 e 2, che moltiplicandoli ritornano 3.

In seguito reduce() non passa più altri due numeri della lista, bensì il risultato precedentemente ottenuto (3) e l'elemento successivo nella lista (3), ottenendo come risultato il prodotto di quest'ultimi e così via.

L'operazione potrebbe essere riassunta in questo modo:

>>> ((((1 * 2) * 3) * 4) * 5)
120
>>>

L'utilizzo di functools.reduce() può essere un'alternativa più ottimizzata e leggibile di un for loop. Di seguito il procedimento per ottenere lo stesso risultato precedente utilizzando un for loop:

prodotto = 1
lista = [1, 2, 3, 4, 5]
for numero in lista:
    prodotto *= numero

print(prodotto)
#output 120


Condividi sui Social