Decoratori

Python SELF IT
Livello 14 , Lezione 1
Disponibile

5.1 Introduzione ai Decoratori

I decoratori sono funzioni che accettano un'altra funzione come argomento e restituiscono una nuova funzione, modificando o estendendo il comportamento della funzione originale. I decoratori sono utilizzati per migliorare la leggibilità e il riutilizzo del codice.

I decoratori consentono di modificare il comportamento delle funzioni o metodi senza cambiare il loro codice sorgente. Per questo motivo sono ampiamente utilizzati per aggiungere funzionalità, logging, controllo degli accessi e molte altre attività.

La sintassi dei decoratori in Python include l'uso del simbolo @ davanti al nome del decoratore, che viene posizionato prima della definizione della funzione.


@decorator
def my_function():
    pass

Questo è equivalente al seguente codice:


def my_function():
    pass
        
my_function = decorator(my_function)

Pensa attentamente a cosa sta succedendo qui: dichiariamo una funzione my_function, ma poi la sostituiamo con la funzione decorator a cui viene passata la nostra funzione come parametro. La funzione decorator può chiamare la nostra funzione a sua discrezione.

5.2 Creare un semplice decoratore

Vediamo un semplice decoratore che stampa un messaggio prima e dopo la chiamata di una funzione.


def my_decorator(func):
    def wrapper():
        print("Prima della chiamata della funzione")
        func()
        print("Dopo la chiamata della funzione")

    return wrapper
        
@my_decorator
def say_hello():
    print("Ciao!")
        
say_hello()

Spiegazione

Decoratore (my_decorator): Questa funzione prende la funzione func come argomento e restituisce una nuova funzione wrapper, che chiama func e aggiunge un comportamento aggiuntivo prima e dopo la sua chiamata.

Funzione con decoratore (say_hello): La funzione say_hello è avvolta dal decoratore my_decorator, che aggiunge un comportamento aggiuntivo quando viene chiamata.

Output:


# Prima della chiamata della funzione
Ciao!
# Dopo la chiamata della funzione

5.3 Decoratori con argomenti

I decoratori possono accettare argomenti, il che permette di configurare il loro comportamento in modo flessibile.


def repeat(num_times):
    def decorator_repeat(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                func(*args, **kwargs)

        return wrapper
        
    return decorator_repeat
        
@repeat(num_times=3)
def say_hello(name):
    print(f"Ciao, {name}!")
        
say_hello("Alice")

Spiegazione

Decoratore con argomenti (repeat): Questa funzione prende l'argomento num_times e restituisce il decoratore decorator_repeat.

Decoratore (decorator_repeat): Questo decoratore prende la funzione func e restituisce una nuova funzione wrapper, che chiama func num_times volte.

Funzione con decoratore (say_hello): La funzione say_hello viene chiamata tre volte grazie al decoratore repeat.

Output:


Ciao, Alice!
Ciao, Alice!
Ciao, Alice!
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION