Python recentemente ha avuto un grande sviluppo intorno tipizzazione statica. A partire da Python 3.5, i suggerimenti di tipo sono una cosa. Questo è ciò che era PEP 0484. La sintassi del suggerimento del tipo si basa completamente sulla sintassi dell'annotazione della funzione che è stata introdotta in precedenza con PEP 3107. Ciò ha permesso a PEP 0484 di essere un cambiamento che non comportava una nuova sintassi che lo rende molto attraente e facile da adattare.
Quindi, come funziona? La sintassi è in realtà piuttosto intuitiva per i casi semplici. Ad esempio:
def greeting(name: str) -> str:
return 'Hello ' + name
Il sistema di suggerimento del tipo supporta anche le cose molto complicate. Puoi anche usare tipi di utenti, callable, sovraccarichi multipli usando i sindacati, anche tipi generici. Puoi vedere molti esempi nel PEP stesso.
Puoi anche guardare Guido van Rossum’s talk in merito al tipo di suggerimento all'ultimo PyCon, è davvero interessante e copre molti dettagli.
Infine, con tutti questi suggerimenti di tipo, cosa facciamo con loro? Bene, c'è questa grande libreria che esiste da un po ', ben prima di Python 3.5 e PEP 0484. In realtà, la sintassi di suggerimento del tipo che è stata introdotta ufficialmente ora si basa su quella libreria, ma è appena stata formalizzata. La libreria è chiamata mypy ed è fondamentalmente un controllo di tipo statico per Python. Una volta installato, è possibile utilizzare l'eseguibile mypy
per digitare il controllo di qualsiasi script Python che contiene annotazioni di tipo.
Per esempio, mettiamo sopra definizione di funzione in un file, e lo chiamano con gli argomenti di tipo sbagliato:
greeting(123)
mypy sul file in esecuzione, ha pronunciato la seguente uscita:
$ mypy test.py
test.py:4: error: Argument 1 to "greeting" has incompatible type "int"; expected "str"
mypy, mentre tecnicamente sperimentale, è uno strumento molto potente che funziona davvero bene. Se ti piace questa cosa e adotteresti annotazioni di tipo, dovresti verificarlo davvero.
Forse quando PyCharm supporta [PEP 484] (https://www.python.org/dev/peps/pep-0484/)? –