Un decoratore in Python è una funzione che prende un'altra funzione come argomento, aggiunge delle funzionalità e restituisce una nuova funzione. È un design pattern molto potente che permette di estendere il comportamento di una funzione senza modificarne il codice sorgente. La sintassi per applicare un decoratore è `@nome_decoratore`.
Un Problema: Misurare il Tempo di Esecuzione
Immagina di avere due funzioni e di voler misurare quanto tempo impiega ognuna a essere eseguita. L'approccio naif sarebbe:
import time
def funzione_lenta():
start_time = time.time()
# ... codice della funzione ...
end_time = time.time()
print(f"Tempo impiegato: {end_time - start_time}s")
def altra_funzione_lenta():
start_time = time.time()
# ... altro codice ...
end_time = time.time()
print(f"Tempo impiegato: {end_time - start_time}s")
Questo codice è ripetitivo e "sporca" la logica principale delle funzioni. Qui un decoratore è la soluzione perfetta.
La Soluzione con un Decoratore
Creiamo una funzione `timer_decorator` che fungerà da decoratore. Questa funzione definisce una "funzione wrapper" interna che contiene la logica di misurazione del tempo.
import time
def timer_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs) # Esegue la funzione originale
end_time = time.time()
print(f"La funzione '{func.__name__}' ha impiegato {end_time - start_time:.4f}s")
return result
return wrapper
Ora possiamo "decorare" le nostre funzioni in modo pulito:
@timer_decorator
def funzione_lenta():
time.sleep(2)
@timer_decorator
def altra_funzione_lenta(x, y):
time.sleep(1)
return x + y
funzione_lenta()
altra_funzione_lenta(5, 3)
Output:
La funzione 'funzione_lenta' ha impiegato 2.0034s
La funzione 'altra_funzione_lenta' ha impiegato 1.0012s
Abbiamo separato la logica di timing (la "cross-cutting concern") dalla logica di business. I decoratori sono usati estensivamente in framework web come Flask e FastAPI per compiti come la gestione dell'autenticazione, il logging e il caching.
Cosa Possiamo Fare per Te
Scriviamo codice Python pulito, modulare e manutenibile, seguendo le best practice del settore. Che si tratti di creare applicazioni web, API o script di automazione, il nostro approccio garantisce software robusto e facile da estendere in futuro. La conoscenza di pattern avanzati come i decoratori ci permette di creare soluzioni eleganti ed efficienti.
Richiedi un code reviewHai bisogno di una soluzione su misura?
Dalla Web App al gestionale custom, trasformiamo le tue idee in software performante. Contattaci per una consulenza gratuita.
Richiedi una consulenza