Funzioni in Python: Funzioni con Decoratori

by theArchitect
SHARE
Funzioni in Python: Funzioni con Decoratori
© Guida-HTML5.it

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.

Approfondisci con risorse ufficiali

SHARE