Introduzione
I decoratori in Python sono una potente funzionalità che permette di modificare o estendere il comportamento di una funzione senza modificarne il codice sorgente. Questo concetto è molto utile per aggiungere funzionalità come il logging, la verifica dei permessi, o la misurazione delle prestazioni. In questo tutorial, esploreremo come definire e utilizzare i decoratori in Python, fornendo esempi pratici e spiegazioni dettagliate.
Codice completo
def decoratore(funzione):
def funzione_decorata(*args, **kwargs):
print("Esecuzione della funzione:", funzione.__name__)
risultato = funzione(*args, **kwargs)
print("Funzione eseguita con successo.")
return risultato
return funzione_decorata
@decoratore
def somma(a, b):
return a + b
@decoratore
def moltiplica(a, b):
return a * b
# Chiamata delle funzioni decorate
risultato_somma = somma(5, 3)
print("Risultato somma:", risultato_somma)
risultato_moltiplica = moltiplica(5, 3)
print("Risultato moltiplicazione:", risultato_moltiplica)
Spiegazione
Iniziamo con la definizione del nostro decoratore. Un decoratore è una funzione che prende un´altra funzione come argomento e restituisce una nuova funzione. Nel nostro esempio, abbiamo definito un decoratore chiamato decoratore.
def decoratore(funzione):
def funzione_decorata(*args, **kwargs):
print("Esecuzione della funzione:", funzione.__name__)
risultato = funzione(*args, **kwargs)
print("Funzione eseguita con successo.")
return risultato
return funzione_decorata
All´interno del decoratore, abbiamo definito una funzione interna chiamata funzione_decorata. Questa funzione si occupa di eseguire la funzione originale e di stampare dei messaggi prima e dopo l´esecuzione. Utilizziamo *args e **kwargs per permettere alla funzione decorata di accettare un numero variabile di argomenti.
Successivamente, abbiamo applicato il nostro decoratore alle funzioni somma e moltiplica utilizzando il simbolo @. Questo è un modo conciso per applicare un decoratore a una funzione.
@decoratore
def somma(a, b):
return a + b
@decoratore
def moltiplica(a, b):
return a * b
Quando chiamiamo somma(5, 3) o moltiplica(5, 3), in realtà stiamo chiamando la funzione decorata, che a sua volta chiama la funzione originale e aggiunge il comportamento definito nel decoratore.
Best practice
- Usa i decoratori per il logging: I decoratori sono ottimi per aggiungere funzionalità di logging senza inquinare il codice della logica principale.
- Separazione delle preoccupazioni: Utilizza i decoratori per separare la logica di business dalla logica di controllo, come la gestione degli errori o la verifica dei permessi.
- Documentazione: Assicurati di documentare i tuoi decoratori, in modo che altri sviluppatori (o tu stesso in futuro) possano comprendere rapidamente il loro scopo e utilizzo.
- Composizione di decoratori: Puoi applicare più decoratori a una singola funzione. Ricorda che l´ordine in cui i decoratori sono applicati può influenzare il comportamento finale.
Riepilogo
In questo tutorial abbiamo esplorato i decoratori in Python, una funzionalità avanzata che consente di estendere il comportamento delle funzioni in modo pulito e riutilizzabile. Abbiamo visto come definire un decoratore e come applicarlo a funzioni esistenti. I decoratori possono semplificare il codice e migliorare la manutenibilità, rendendoli uno strumento prezioso nel tuo arsenale di programmazione.
