Introduzione
Le funzioni anonime in Python, chiamate comunemente lambda, sono uno strumento molto utile quando serve definire una funzione piccola, immediata e usa-e-getta. Non sostituiscono le normali funzioni def, ma in alcuni casi permettono di scrivere codice più compatto e leggibile.
Un sotto-argomento particolarmente pratico, spesso sottovalutato, è l’uso delle lambda per costruire trasformazioni temporanee nei flussi di dati. In altre parole: quando hai una lista, un dizionario o una sequenza di record e vuoi applicare una modifica rapida senza creare una funzione separata, lambda può essere la scelta giusta.
Questo approccio è molto comune in operazioni come:
- normalizzare valori prima di salvarli;
- preparare dati per una stampa o un report;
- convertire campi testuali in un formato uniforme;
- usare funzioni come map(), sorted() o filter() con logica molto semplice.
Vediamo un esempio concreto: partiremo da una lista di prodotti e useremo lambda per trasformarne i dati in modo rapido, leggibile e riutilizzabile in un flusso di elaborazione.
Codice completo
from pprint import pprint
# Dataset di esempio: lista di prodotti
prodotti = [
{"nome": " tastiera meccanica ", "prezzo": 89.90, "categoria": "periferiche"},
{"nome": "mouse gaming", "prezzo": 39.50, "categoria": "periferiche"},
{"nome": "monitor 27 pollici", "prezzo": 229.99, "categoria": "display"},
{"nome": "cavo usb-c", "prezzo": 9.99, "categoria": "accessori"},
]
# 1) Lambda per normalizzare il nome: strip + title
normalizza_nome = lambda testo: testo.strip().title()
# 2) Lambda per applicare uno sconto del 10%
sconto_10 = lambda prezzo: round(prezzo * 0.90, 2)
# 3) Trasformazione dei dati: creiamo una nuova lista senza modificare l´originale
prodotti_formattati = [
{
"nome": normalizza_nome(prodotto["nome"]),
"prezzo_scontato": sconto_10(prodotto["prezzo"]),
"categoria": prodotto["categoria"].lower()
}
for prodotto in prodotti
]
# 4) Ordinamento dei prodotti per prezzo scontato usando lambda come chiave
prodotti_ordinati = sorted(prodotti_formattati, key=lambda p: p["prezzo_scontato"])
# 5) Creiamo una stringa di riepilogo per ogni prodotto
riepiloghi = list(
map(
lambda p: f´{p["nome"]} - {p["categoria"]} - €{p["prezzo_scontato"]}´,
prodotti_ordinati
)
)
print("Prodotti formattati:")
pprint(prodotti_formattati)
print("nProdotti ordinati per prezzo scontato:")
pprint(prodotti_ordinati)
print("nRiepilogo testuale:")
for riga in riepiloghi:
print("-", riga) Spiegazione
La sintassi di una lambda in Python è molto semplice:
lambda argomenti: espressione
Una lambda è quindi una funzione anonima che contiene una sola espressione. Non può includere blocchi complessi con più istruzioni, cicli o assegnazioni tradizionali come una funzione definita con def.
1. Normalizzazione del testo
Nel codice abbiamo creato:
normalizza_nome = lambda testo: testo.strip().title() Questa lambda riceve una stringa, rimuove gli spazi iniziali e finali con strip() e converte il testo in formato titolo con title(). È utile quando i dati arrivano da form, file CSV o API e non sono uniformi.
2. Calcolo rapido di uno sconto
La seconda lambda:
sconto_10 = lambda prezzo: round(prezzo * 0.90, 2) applica uno sconto del 10% e arrotonda a due decimali. Questo è un caso tipico in cui una lambda è perfetta: la logica è breve, immediata e leggibile.
3. Trasformazione dei dati con list comprehension
La lista prodotti_formattati viene costruita con una list comprehension. Qui la lambda non viene usata direttamente nella comprehension, ma attraverso due funzioni già definite. Questo rende il codice più chiaro e aiuta a separare le responsabilità:
- la lambda normalizza il nome;
- la lambda calcola il prezzo scontato;
- la comprehension costruisce la nuova struttura dati.
4. Ordinamento con lambda come chiave
Una delle applicazioni più frequenti delle lambda è come funzione key in sorted():
prodotti_ordinati = sorted(prodotti_formattati, key=lambda p: p["prezzo_scontato"]) Qui la lambda dice a sorted() come confrontare gli elementi: in base al campo prezzo_scontato. È un uso molto comune perché evita di scrivere una funzione separata solo per estrarre un valore da confrontare.
5. map() per generare un output testuale
Infine, map() applica una trasformazione a tutti gli elementi della lista:
map(lambda p: f´{p["nome"]} - {p["categoria"]} - €{p["prezzo_scontato"]}´, prodotti_ordinati) In questo caso la lambda converte ogni dizionario in una stringa leggibile. Anche qui il vantaggio è la compattezza: la trasformazione è semplice e non richiede una funzione nominata.
Best practice
- Usa lambda solo per logiche brevi: se la funzione cresce troppo, passa a def. Una lambda lunga perde leggibilità molto in fretta.
- Dai un nome alla lambda quando serve riutilizzo: assegnarla a una variabile, come normalizza_nome, aiuta a capire il suo scopo.
- Evita lambda annidate o troppo compatte: codice “furbo” non significa codice migliore.
- Preferisci lambda in contesti funzionali: sorted(), map(), filter(), min(), max() sono i casi d’uso più naturali.
- Non usarle per nascondere logica complessa: se dentro la lambda devi fare troppi calcoli, controlli o conversioni, meglio una funzione normale con nome esplicito.
- Ricorda che una lambda restituisce un’espressione: non può contenere più istruzioni separate. Se ti serve un flusso articolato, def è la scelta corretta.
Riepilogo
Le funzioni lambda in Python sono uno strumento piccolo ma molto utile quando devi applicare una trasformazione rapida ai dati. In questo tutorial le abbiamo usate per:
- normalizzare stringhe;
- calcolare valori derivati come uno sconto;
- ordinare strutture dati con sorted();
- generare output testuale con map().
Il messaggio principale è semplice: lambda è ottima per operazioni brevi e locali. Se il codice diventa troppo articolato, una funzione tradizionale è quasi sempre più chiara, testabile e manutenibile.
Approfondisci con risorse ufficiali
- Documentazione Python sulle funzioni lambda: https://docs.python.org/3/reference/expressions.html#lambda
- Built-in functions come sorted(), map() e filter(): https://docs.python.org/3/library/functions.html
- PEP 8 - Style Guide for Python Code: utile per capire quando preferire chiarezza e nomi espliciti rispetto a soluzioni troppo compatte: https://peps.python.org/pep-0008/
