Un decoratore in Python è una funzione speciale che può modificare il comportamento o l’output di altre funzioni o classi. I decoratori in Python sono un esempio molto potente di funzioni di ordine superiore.
Ecco un esempio di come si può usare un decoratore:
```
def decorator_function(original_function):
def wrapper_function():
print(f”{original_function.name} funzione avvolta”)
return original_function()
return wrapper_function
@decorator_function
def display():
print(“Funzione display eseguita”)
In questo esempio, `decorator_function` è il nostro decoratore. Prende una funzione come parametro (in questo caso `original_function`), e poi definisce una nuova funzione interna (in questo caso `wrapper_function`) che modifica o estende il comportamento della funzione originale.
Il decoratore viene poi applicato alla funzione `display` utilizzando il simbolo `@`.
Un decoratore può anche prenderle argomenti, come ad esempio:
```
def decorator_function_with_args(arg1, arg2):
print(f“Argomenti per il decoratore: {arg1}, {arg2}”)
@decorator_function_with_args(“arg1”, “arg2”)
def display_info(name, age):
print(f“Funzione display_info eseguita con argomenti ({name}, {age})”)
In questo esempio, `decorator_function_with_args` è un decoratore che prende dei parametri. L’uso di _args e _\*kwargs permette al wrapper di gestire un numero arbitrario di argomenti e di parole chiave che vengono passati alla funzione che stiamo decorando.
Mentre i decoratori possono sembrare confusi all’inizio, diventano molto utili una volta che si capisce come utilizzarli. Sono ampiamente utilizzati nei framework web come Flask e Django.