Guida alle Lambda Function in Python: Addio alle funzioni "one-shot"

  

In Python, la pulizia del codice è fondamentale. Spesso ci troviamo a scrivere piccole funzioni che servono solo per un'operazione specifica in un unico punto del programma. Definire queste funzioni con la classica sintassi def può appesantire il codice inutilmente.

È qui che entrano in gioco le Lambda Function.

🔗 Ti piace Techelopment? Dai un'occhiata al sito per tutti i dettagli!

Il Problema: Le Funzioni "Usa e Getta"

Immaginiamo di avere una lista di tuple che rappresentano dei prodotti e i loro prezzi. Vogliamo ordinare questa lista in base al prezzo (il secondo elemento della tupla).

Normalmente, useremmo il metodo sort() passando una funzione alla chiave key. Ecco come apparirebbe con l'approccio classico:

# Lista di prodotti: (Nome, Prezzo)
prodotti = [("Laptop", 1200), ("Mouse", 25), ("Tastiera", 80), ("Monitor", 300)]

# Definiamo una funzione specifica per estrarre il prezzo
def estrai_prezzo(prodotto):
    return prodotto[1]

# Usiamo la funzione definita sopra per ordinare
prodotti.sort(key=estrai_prezzo)

print(prodotti)

Perché questo è inefficiente? La funzione estrai_prezzo occupa spazio nel codice, ha bisogno di un nome e rimarrà definita nel tuo namespace anche se non la userai mai più in tutto il programma. È una tipica funzione one-shot.


La Soluzione: Lambda Function

Le funzioni lambda sono funzioni anonime (senza nome) e definite su una sola riga. Sono perfette per compiti rapidi come quello dell'esempio precedente.

La Sintassi

La struttura di una lambda è semplicissima: 

lambda argomenti: espressione

L'esempio precedente, riscritto

Vediamo come lo stesso algoritmo di ordinamento diventa molto più snello:

prodotti = [("Laptop", 1200), ("Mouse", 25), ("Tastiera", 80), ("Monitor", 300)]

# Ordiniamo usando una lambda function al volo
prodotti.sort(key=lambda p: p[1])

print(prodotti)

In una sola riga abbiamo eliminato la necessità di una funzione esterna. Il codice è più leggibile perché l'operazione di "estrazione del prezzo" è dichiarata esattamente dove viene usata.


Un altro esempio: Filtrare una lista di dati

Un altro caso tipico in cui si creano funzioni "one-shot" è quando dobbiamo scremare una lista di elementi in base a una condizione specifica.

Immaginiamo di avere un database (sotto forma di lista di dizionari) che contiene gli utenti di un'applicazione. Vogliamo ottenere rapidamente solo gli utenti che hanno più di 18 anni.

L'approccio "ingombrante" (con def)

utenti = [
    {"nome": "Alice", "eta": 25},
    {"nome": "Bob", "eta": 15},
    {"nome": "Charlie", "eta": 30},
    {"nome": "Diana", "eta": 17}
]

# Funzione creata solo per essere usata una volta nel filter
def maggiorenne(utente):
    return utente["eta"] >= 18

# Applichiamo il filtro
adulti = list(filter(maggiorenne, utenti))

L'approccio "Pythonic" (con Lambda)

# Tutto in una riga: filtro immediato e leggibile
adulti = list(filter(lambda u: u["eta"] >= 18, utenti))

print(adulti)

Perché con le lambda è meglio?

  • Leggibilità spaziale: La condizione è scritta esattamente dove serve.
  • Economia di nomi: Non hai dovuto inventare un nome per una logica così semplice.
  • Flessibilità: Puoi cambiare la logica al volo senza dover modificare definizioni esterne (ma questo dipende anche dal contesto in cui lavori - es. nel lavoro in team l'approccio andrebbe condiviso).

Quando usare (e non usare) le Lambda

Le lambda sono strumenti potenti, ma vanno usate con criterio.

Caratteristica Funzione Standard (def) Lambda Function
Nome Obbligatorio Anonima
Righe Multiple Singola
Return Esplicito con return Implicito
Riutilizzo Facile Difficile

Conclusione

Le lambda function non sostituiscono le funzioni tradizionali, ma sono il "coltellino svizzero" per mantenere il codice Python snello e Pythonic. La prossima volta che stai per scrivere una funzione che userai una sola volta, chiediti: "Posso scriverla con una lambda?"



Follow me #techelopment

Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment