2016-06-24 22 views
6

Gli hint del tipo ora sono disponibili nella versione Python 3.5. Nella specifica (PEP 484) gli obiettivi (ei non-obiettivi) sono esposti chiaramente:Uso dei suggerimenti tipo per tradurre Python in Cython

Motivazioni e obiettivi

Questa PEP mira a fornire una sintassi standard per annotazioni di tipo, aprendo codice Python per semplificare l'analisi statica e il refactoring, il potenziale controllo del tipo di runtime e (forse, in alcuni contesti) la generazione del codice utilizzando le informazioni sul tipo. [...]

Di questi obiettivi, l'analisi statica è la più importante.

non-obiettivi

utilizzando il tipo di suggerimenti per ottimizzazioni delle prestazioni è lasciata come esercizio per il lettore.

D'altra parte, Cython ha utilizzato per un lungo periodo di sintassi statico per migliorare le prestazioni. Di solito, le persone riscrivono alcuni pezzi del loro codice con la sintassi di Cython, li compila e quindi li reimporta come moduli indipendenti. È un lavoro doloroso fare tutto ciò su una grande base di codice. Ma la cosa peggiore è che anche se segui correttamente tutti i passaggi precedenti, non hai alcuna garanzia di un miglioramento reale (a causa di problemi di compatibilità che potrebbero essere causati se stai usando alcuni moduli).

Sarebbe un compito difficile scrivere uno strumento che utilizza questo nuovo tipo allude cose sparse nel codice per tradurli automaticamente Cython sintassi ed eventualmente fare il resto del lavoro (compilarli in moduli e importare tutti loro indietro)? Sarebbe quindi possibile condividere la stessa sintassi del linguaggio in tutto il codice base.

In teoria, è possibile scrivere uno strumento del genere, ma non sono sicuro che valga la pena (in termini di complessità per scriverlo e il miglioramento reale che sarebbe il rendimento).

Grazie.

+0

Quando hai usato 'cython', quanto del codice Python hai convertito? Pensavo che l'ideale fosse concentrarsi su un sottoinsieme in cui l'accelerazione conta e lasciare il resto in Python. Oppure usa 'cython' come bridge per il codice C++/Fortran esistente. – hpaulj

+0

Sono d'accordo con te in parte. Ma sarebbe meglio, credo, avere una sintassi unificata. Ma va bene, come ha detto @hpaulj, il mio argomento non è per Stackoverflow. Scusate. – GustavoIP

risposta

3

Qualcun altro ha appena chiesto informazioni su 484 e Cython, PEP-484 Type Annotations with own types e ho risposto con un thread da un paio di mesi indietro a circa 484 e numpy.

Ho dubbi sull'adeguatezza di questo argomento per StackOverflow. È un argomento di ricerca, non una domanda "come risolvere questo problema di codifica".

In base alla lettura limitata, i suggerimenti del tipo in 484 sono preliminari e qualsiasi utilizzo è limitato al controllo del codice sviluppato dagli autori 484. Py3 ha avuto annotazioni per molto tempo, ma ho visto pochissimi esempi di codice che li include. Certamente non nel codice numpy su cui mi concentro qui.

Un altro punto è che cython e numpy (e numba) vengono utilizzati con Py2 tanto quanto, se non di più, di Py3. Quindi gli ultimi campanelli in Py 3.5 sono generalmente ignorati da questi utenti. L'operatore @ è l'unica aggiunta recente al valore degli utenti di numpy.

Siete invitati a rispondere, ma potrei nominare questa domanda per la chiusura in base alla sua duplicazione o fuori tema.

Il modulo typing è in fase di sviluppo presso https://github.com/python/typing

mypy è il controllo di tipo sulla base di 484, https://github.com/python/mypy (divertente, ~/mypy è la directory in cui ho messo tutti i miei script di test SO.)

Ecco dove tagliare il lavoro di controllo del tipo di Python edge è in corso, non qui.

+0

Siamo spiacenti, non ho trovato nulla a riguardo quando ho cercato qui in Stackoverflow e Google. Grazie per il tuo tempo! – GustavoIP