Le annotazioni di tipo (type hints) sono un modo per specificare esplicitamente i tipi attesi per le variabili, gli argomenti e i valori restituiti dalle funzioni. La sintassi è stata introdotta in Python 3.5 (PEP 484). Le annotazioni sono statiche: l'interprete le ignora durante l'esecuzione, sono destinate agli strumenti di analisi del codice (mypy, Pyright, IDE).
Le annotazioni aiutano a:
Esempio:
def add(x: int, y: int) -> int: return x + y def show(items: list[str]) -> None: print(', '.join(items))
Domanda comune:
Possono le annotazioni di tipo influenzare in qualche modo le prestazioni o la correttezza dell'esecuzione del codice?
Risposta: No, le annotazioni di tipo non influenzano né le prestazioni né la funzionalità del programma durante il runtime. Sono solo metadati. Tuttavia, possono essere utilizzate da strumenti o framework esterni per il controllo e la validazione dei tipi (ad esempio, in FastAPI).
Storia
Nel progetto, grandi strutture dinamiche erano annotate con tipi tramite list, dict senza specificare gli elementi (ad esempio: def f(x: list): ...). Di conseguenza, gli analizzatori statici non potevano rilevare errori di tipo, poiché dall'annotazione non era chiaro cosa ci fosse all'interno.
Storia
È stato utilizzato from __future__ import annotations per supportare l'evaluazione posticipata in Python 3.7, ma si è dimenticato di farlo in una parte del progetto. Questo ha portato a errori di riferimento avanti durante l'analisi statica e nel runtime quando si utilizzavano alcuni framework.
Storia
In un grande progetto, è stato specificato in modo errato il tipo di valore restituito: si è dimenticato di importare Optional, si è ricevuto un errore da mypy e una serie di problemi non documentati nell'IDE, che ostacolavano l'autocompletamento e l'evidenziazione degli errori.