Le sei cose da sapere su Python

Se si guardano le classifiche dei linguaggi di programmazione più popolari, Python è stabilmente nelle primissime posizioni e superato solo da linguaggi (Java, C, C++) che hanno una storia e una notorietà molto più importanti.

E si lascia dietro nomi altrettanto altisonanti come JavaScript o Swift. È un risultato se vogliamo sorprendente per un linguaggio che all’inizio era considerato poco più che scripting.

Oggi Python viene usato per qualsiasi cosa, spaziando dai semplici script di sistema al machine learning fino allo sviluppo mobile. Continua a essere uno dei linguaggi più gettonati dagli sviluppatori ed è un buon “investimento” per chi vuole dedicarvi del tempo e imparare come usarlo. In questo avvicinamento a Python ci sono però alcune cose che è bene sapere.

Python 2 e Python 3

Python è disponibile in due filoni di versioni. Il filone 2.x (in pratica oggi le release 2.7.x) ha rappresentato per lungo tempo la piattaforma “standard” per gli sviluppatori, quella che si doveva conoscere e usare anche se esistevano già le versioni 3.x. Per due ragioni: le due macroversioni usano una sintassi diversa, il che rendeva incompatibile una grande quantità di codice; non esistevano per Python 3.x molte librerie che invece c’erano per la versione 2.7.

Oggi le cose sono diverse e Python 3 (siamo alla release 3.6) ha tutti gli strumenti che servono in quanto a librerie. In più porta diverse funzioni utili che a Python 2.7 mancano. Chi inizia ad approcciare il linguaggio dovrebbe considerare la versione 3.x, pur sapendo che la 2.7 sarà supportata ufficialmente ancora per qualche anno.

Tutto incluso ed estendibile

L’importanza delle librerie di terze parti che ha influito sul confronto tra le versioni 2 e 3 di Python è uno dei tanti segni dell’importanza che per il linguaggio ha il concetto di espandibilità. Chi approccia Pyhton deve quindi considerare che, rispetto ad altri linguaggi di programmazione, la dotazione di base “ufficiale” è solo un punto di partenza.

Questo non vuol dire che le librerie standard siano incomplete. Anzi, sono un insieme robusto che copre tutte le principali necessità per lo sviluppo di base (dalla gestione di file e directory al networking, dal threading alle operazioni asincrone) e che tocca anche temi più complessi come la gestione dei protocolli Internet, i formati JSON, un minimo di GUI e i database SQLite. Oltre questa base esistono migliaia di librerie di terze parti, che dovrebbero essere ampiamente considerate e utilizzate.

A ciascuno la sua distribuzione

Esiste ovviamente una versione di Python “ufficiale”. È quella che si scarica dal sito della Python Software Foundation e che si trova di solito già preinstallata nelle distribuzioni Linux e anche in macOS. Alcuni sistemi operativi magari non hanno Python 3 ma la versione 2.7 (basta verificare se il comando python3 è riconosciuto), l’aggiornamento è comunque cosa molto semplice.

Premesso questo, esistono molte “versioni” - ma sarebbe meglio dire distribuzioni, come per Linux - che non modificano il linguaggio in sé ma lo corredano già in partenza di alcuni tool, caratteristiche e librerie per lo sviluppo in ambiti specifici. Alcuni esempi sono Anaconda per il machine learning, IronPython per gli ambienti .Net, Jython per gli sviluppatori Java.

Semplice ma rigoroso

Python è un linguaggio di sviluppo semplice da imparare. Il vocabolario è chiaro e la sintassi è pensata per essere ben comprensibile. Molte operazioni che in altri linguaggi richiederebbero diverse linee di codice si possono esprimere con semplici istruzioni, il che favorisce sia lo sviluppo in sé sia la leggibilità. Questa semplicità aiuta i neofiti di Python ma lascia comunque aperta la porta a notevoli possibilità di estensione, attraverso le librerie di terze parti.

Da un certo punto di vista quindi Python è un linguaggio a complessità, volendo, crescente. Si inizia esplorando il suo lato semplice da linguaggio di scripting e automazione, aiutati anche dal fatto che gli ambienti di sviluppo sono quasi sempre interpreti e non compilatori. Poi man mano si cresce in difficoltà e si vedono i lati di Python in quanto linguaggio generico e trasversale.

Python presenta ovviamente alcuni aspetti che possono essere considerati negativamente da chi è già abituato ad altri linguaggi. Uno di quelli più citati in tal senso è la gestione delle variabili: Python adotta il dynamic typing e questo può portare ad errori di runtime per chi viene da linguaggi con tipizzazione più rigida.

Altro aspetto molto peculiare è il valore sintattico degli spazi: in Python i rientri hanno un preciso significato (essenziale nell’interprete) legato al flusso logico, che va sempre rispettato.

Per cosa sì, per cosa no

Python si è conquistato il ruolo di linguaggio adatto a qualsiasi sviluppo. È un linguaggio generico con cui creare applicazioni sia da linea di comando sia ad interfaccia grafica, distribuite anche come eseguibili autonomi (grazie a tool aggiuntivi).

Premesso questo, ovviamente ci sono cose che Python sa fare meglio di altre. O che è più facile o popolare fare in Python piuttosto che con altri linguaggi.

Storicamente è stato usato principalmente per elementi di scripting e automazione, con questi due termini intesi nel senso più lato possibile e non solo per l’automazione di sistema. Oggi ad esempio si costruiscono interi servizi web, grazie a un buon supporto degli eventi asincroni. Il linguaggio è diventato anche molto popolare come piattaforma per il machine learning, grazie al fatto che le principali librerie in questo campo hanno interfacce Python.

Poi ci sono le cose che Python non sa fare bene, o affatto. Ad esempio non è un linguaggio di basso livello e quindi non va bene per creare componenti come i driver. Non è adatto poi a creare eseguibili multipiattaforma e non è nemmeno la scelta ideale se il codice deve essere il più veloce possibile. Il che ci porta a un ultimo aspetto...

Questione di velocità

Se volete scatenare una polemica con i fan del linguiaggio, basta sostenere che è lento. La polemica è facile perché effettivamente non è stato pensato per la velocità, a partire dal fatto che di solito i runtime di Python sono interpreti e non compilatori. Ma anche quando si compila codice Python - cosa possibile, con i tool giusti come PyPy - il typing dinamico va comunque a sfavore delle prestazioni perché impedisce di ottimizzare al massimo il codice.

Assodata la questione di fondo, il punto è capire quanto sia aggirabile. Spesso lo è: ci sono programmi che potrebbero essere più veloci se il loro sviluppatore avesse sfruttato le possibilità offerte da librerie esterne. NumPy, ad esempio, è un package praticamente obbligatorio per chi fa calcoli matematici intensivi con Python.

Un’altra strada è identificare le parti di codice che devono essere velocizzate e “tradurle” in linguaggi più di basso livello da reimportare nel codice principale usando moduli specifici, come Cython per il C o Numba per l’assembly.

Se questo articolo ti è piaciuto e vuoi rimanere sempre informato sulle novità tecnologiche iscriviti alla newsletter gratuita.

LASCIA UN COMMENTO

Please enter your comment!
Please enter your name here