Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Introduzione ai Decorator | Padronanza Degli Iteratori e Dei Decorator in Python
Concetti di Programmazione Funzionale in Python

bookIntroduzione ai Decorator

Scorri per mostrare il menu

Note
Definizione

Un decoratore in Python è una funzione di ordine superiore che prende un'altra funzione come argomento e restituisce una nuova funzione che estende o modifica il comportamento della funzione originale.

I decoratori sono una caratteristica fondamentale in Python che permettono di modificare o migliorare il comportamento di funzioni o metodi senza modificare direttamente il loro codice. Alla base, i decoratori sono funzioni di ordine superiore: prendono un'altra funzione come argomento, ne estendono o modificano il comportamento e restituiscono una nuova funzione. In Python, la sintassi per applicare un decoratore è il simbolo @ seguito dal nome del decoratore, posizionato direttamente sopra la definizione della funzione.

Esempi comuni di utilizzo dei decoratori includono:

  • Logging;
  • Misurazione del tempo di esecuzione delle funzioni;
  • Controllo degli accessi o permessi;
  • Memoizzazione (caching dei risultati);
  • Validazione degli input.

I decoratori permettono di mantenere questa logica separata dalla logica principale dell'applicazione, rendendo il codice più pulito e manutenibile. Padroneggiando i decoratori, si acquisisce uno strumento potente per scrivere codice Python riutilizzabile ed espressivo.

12345678910111213
def simple_decorator(func): def wrapper(*args, **kwargs): print("Before the function call") result = func(*args, **kwargs) print("After the function call") return result return wrapper @simple_decorator def greet(name): print(f"Hello, {name}!") greet("Alice")
copy

Comprensione di args e kwargs nelle definizioni di funzione

Quando si scrivono decorator e wrapper, spesso è necessario gestire funzioni che accettano un numero qualsiasi o tipi diversi di argomenti. Python fornisce *args e **kwargs per rendere ciò possibile.

  • *args raccoglie tutti gli argomenti posizionali extra passati a una funzione in una tupla;
  • **kwargs raccoglie tutti gli argomenti con parola chiave extra in un dizionario.

Questa flessibilità è fondamentale per i decorator. Un decorator deve essere in grado di accettare e inoltrare tutti gli argomenti alla funzione originale, indipendentemente dal loro numero o tipo. Senza *args e **kwargs, il decorator funzionerebbe solo con funzioni che hanno una firma fissa, limitando la riutilizzabilità.

123456789101112
def my_decorator(func): def wrapper(*args, **kwargs): print("Arguments:", args) print("Keyword arguments:", kwargs) return func(*args, **kwargs) return wrapper @my_decorator def example(a, b, greeting="Hello"): print(f"{greeting}, {a} and {b}!") example(1, 2, greeting="Hi")
copy

Questo approccio garantisce che il decorator possa avvolgere qualsiasi funzione, rendendo il codice sia robusto che riutilizzabile.

1. Qual è lo scopo del simbolo @ in Python?

2. Come modifica un decoratore il comportamento di una funzione?

question mark

Qual è lo scopo del simbolo @ in Python?

Seleziona la risposta corretta

question mark

Come modifica un decoratore il comportamento di una funzione?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 1

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 4. Capitolo 1
some-alt