Funzioni anonime o lambda in python: una introduzione

Funzioni anonime in Python - lambda
Tempo di lettura: 4 minuti

Funzioni anonime in Python

In questo articolo imparerai cosa sono le funzioni anonime in Python, conosciute come funzioni Lambda – Lambda functions. Imparerai che cosa sono, la loro sintassi, quando utilizzarle (con esempi). Gli argomenti che discuteremo sono i seguenti:

  • Che cosa sono le funzioni anonime o lambda in Python;
  • Come si usano le funzioni anonime in Python;
  • Esempio di funzione anonima;
  • Utilizzo di funzioni Lambda;
  • Quando non dovresti usare le funzioni Lambda?;
  • Funzioni Lambda con le funzioni native di Python: filter(), map() e reduce();

Dopo aver trattato di django in qualche articolo precedente, ho voluto approfondire l’utilizzo della funzioni lambda.

Inizialmente ho pensato che le funzioni lambda erano un modo per rendere complicata la scrittura e la lettura del codice, ma in questo articolo ti voglio mostrare degli utilizzi comuni, ed utili, di questa tipologia di sintassi.

Che cosa sono le funzioni anonime o lambda in Python

In Python una funzione anonima è una funzione definita senza una formale dichiarazione. Mentre per definire una normale funzione, in Python, viene utilizzata la parola chiave – keyword – def, per definire una funziona anonima viene utilizzata la keyword lambda.
Per questo motivo le funzioni anonime sono chiamate anche funzioni Lambda.

Come si usano le funzioni anonime in Python

Una funzione lambda, in Python, ha la seguente sintassi.

Sintassi una funzione lambda in Pyton

lambda arguments: expression

Una funzione lambda può avere tanti argomenti, ma una sola espressione. L’espressione è valutata e restituita – return. Le funzioni lambda vengono utilizzate dove è necessario l’utilizzo di oggetti di tipo funzione.

Esempio di funzione anonima

In questa sezione, sarà mostrato un esempio di funzione lambda che raddoppia il valore in input.

semplice programma per mostrare l’utilizzo della funzione lambda

double = lambda x: x * 2

print(double(4))

Risultato:

8

Spiegazione del codice

Nel codice mostrato sopra la funzione lambda è: lambda x: x * 2. Dove la prima x è l’argomento  e x*2 è l’espressione che viene valutata e restituita all’utente. Per semplicità è stato utilizzato una funzione che prende un solo argomento.

Questa funzione non ha un nome. Ritorna un’oggetto funzione che è assegnato alla variabile double. Verifichiamo la stessa funzione utilizzando una funzione standard.

La dichiarazione:

double = lambda x: x * 2

Equivale a:

def double(x):
   return x * 2

Utilizzo di funzioni Lambda

Si utilizzano le funzioni lambda una volta quando si ha bisogno di una funzione senza nome per un tempo breve.

In genere, in Python, si utilizzano le funzioni lambda come un argomento a una funzione di ordine superiore (una funzione che prende come argomenti altre funzioni).

Per esempio un utilizzo naturale è con le funzioni built-in come filter(), map(), reduce(), etc., che saranno discusse in questo articolo.

Perché usare le funzioni lambda

Come visto nella sezione precedente, le funzioni lambda vengono trattate a livello di interprete come le funzioni classiche. In pratica le funzioni lambda forniscono una sintassi compatta per scrivere funzioni che ritornano il risultato di un’espressione.

Tuttavia dovresti sapere quando è una buona idea usare una funzione lambda.  In questa sezione tratterò del principio base che spinge gli sviluppatori Python ad utilizzare le funzioni lambda.

Il caso più frequente di utilizzo delle funzioni lambda nella programmazione in Python è relativo al paradigma (o stile) della programmazione funzionale.

Questo paradigma permette di passare una funzione come parametro di un’altra funzione (per esempio nella funzione map, filter, etc.). In questi casi, l’utilizzo di funzioni lambda offre un modo elegante di creare una one-time function e passarla come parametro.

Quando non dovresti usare le funzioni Lambda

In ambiente di produzione, quindi in fase di rilascio del software, non dovrebbero mai essere presenti funzioni lambda complicate, perché sarà davvero difficile per gli sviluppatori che dovranno manutenere il codice decriptare il funzionamento. Se scopri che stai creando complesse espressioni su una sola riga allora è arrivato il momento di utilizzare funzioni classiche.

Funzioni Lambda con filter()

La funzione filter() è utilizzata per selezionare un particolare elemento all’interno di una sequenza di elementi. La sequenza usata per questa funzione è un iteratore come lista, insieme, tupla, etc.

Gli elementi che possono essere presi sono scelti sulla base di un particolare vincolo. Prende due parametri:

  • Una funzione che definisce il vincolo di filtraggio;
  • Una sequenza (qualsiasi iteratore come lista, insieme, tupla, etc);

Per esempio:


sequences = [10,2,8,7,5,4,3,11,0, 1]
filtered_answer = filter (lambda x: x > 6, sequences) 
print(list(filtered_answer))

Risultato:

[10, 8, 7, 11]

Spiegazione del codice

  • Con la prima dichiarazione si definisce una lista di valori numerici;
  • Viene dichiarata la variabile filter_answer che contiene i valori filtrati dalla lista – valore return della funziona filter();
  • Una funzione lambda che viene eseguita per ogni singolo elemento della lista è ritorna il valore true solo se il numero è maggiore di 6;
  • Si stampa il risultato della funzione filter.

Funzioni Lambda con map()

La funzione map() è impiegata per utilizzare una specifica operazione per ogni elemento di una sequenza. Come filter() prende due parametri:

  • Una funzione che definisce le operazioni elaborate sugli elementi;
  • Una o più sequenze;

Per esempio:

In questo esempio si costruirà un programma che stampa il quadrato dei numeri esternamente alla lista data:

sequences = [10,2,8,7,5,4,11]
squared_result = map (lambda x: x*x, sequences) 
print(list(squared_result))

Risultato:

[100, 4, 64, 49, 25, 16, 121]

Spiegazione del codice

  • Con la prima dichiarazione si definisce una lista di valori numerici;
  • Viene dichiarata la variabile filter_answer che contiene i valori opportunamente calcolati – map();
  • Una funzione lambda che viene eseguita per ogni singolo elemento della lista è ritorna il quadrato di ogni numero;
  • Si stampa il risultato della funzione map().

Funzioni Lambda con reduce()

La funzione reduce come la funzione map() è impiegata per utilizzare una specifica operazione per ogni elemento di una sequenza. I seguenti passaggi sono elaborati dalla funzione per generare l’output:

  • Step1: Esegue l’operazione definita su i primi due elementi della sequenza;
  • Step2: Salva il risultato;
  • Step3: Esegue l’operazione definita su il risultato salvato e, quindi, sul successivo valore della sequenza;
  • Step4: Ripete questi passaggi fino al completamento di tutti gli elementi della lista.

Prende due parametri:

  • Una funzione che definisce le operazioni elaborate sugli elementi;
  • Una sequenza;

Per esempio

In questo esempio si costruirà un programma che calcolerà il prodotto di tutti gli elementi di una lista data:


from functools import reduce

sequences = [1,2,3,4,5,6,]
product = reduce (lambda x, y: x*y, sequences)
print(product)

Risultato:

720

Spiegazione del codice

  • Si importa la funzione reduce dal modulo functools;
  • Viene dichiarata la sequenza di numeri sequences;
  • Viene dichiarata la variabile product che contiene i valori calcolati con la fuzione reduce();
  • Una funzione lambda che viene eseguita per ogni singolo elemento che passo dopo passo elabora il prodotto di un numero della sequenza con il il risultato dei precedenti due;
  • Si stampa il risultato della funzione reduce().

Fine di questa introduzione alle funzioni lambda o funzioni anonime.

Se ti è piaciuto questo articolo, hai dubbi su qualche passaggio o semplicemente commentare, non esitare a scrivere.

Fonte: analyticsvidhya.com

Un commento su “Funzioni anonime o lambda in python: una introduzione”

Rispondi

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: