Visualizza il feed RSS

Titolo provvisorio...

Elogio del Python

Valutazione: 3 voti, con una media del 5.00.
di pubblicato il 31-03-2009 alle 19:30 (7825 Visite)
Il linguaggio Python è stato ideato nei primissimi anni Novanta del secolo scorso da Guido van Rossum, un matematico computazionale olandese.

Si tratta di un linguaggio di scripting, interpretato, di alto livello, general purpose, dotato di numerose estensioni, che ha già sedotto e intruppato nella sua userbase più di un milione di sviluppatori, secondo le statistiche del sito.

Vorrei qui tentare brevissimamente di illustrare a chi non conosce (molto) tale linguaggio i principali motivi per cui è opportuno e sensato utilizzare Python ogni volta che se ne presenti l'occasione. Nel fare questo, seguirò piuttosto pedissequamente l'impostazione di Mark Lutz nel lavoro citato in bibliografia come [3].

1. Qualità del codice;
2. Produttività elevata;
3. Portabilità;
4. Abbondanza di librerie;
5. Facile interoperabilità;
6. Divertimento !

Naturalmente l'advocacy di tutti i linguaggi (esclusi forse brainf*ck e pochi altri... ) sbandiera simili pregi, ma in pochi casi ciò corrisponde alla realtà.

Vediamo quindi di argomentare un po' meglio, per quanto sia possibile negli spazi di un blog.

1) Python è stato progettato, e già questo lo rende radicalmente diverso da molti altri linguaggi (come PHP, ad esempio... ). Ma al di là della facile boutade, il punto è un altro: è stato progettato ed implementato da un matematico. Ne risulta un linguaggio uniforme, coerente, basato in modo strettamente consequenziale su pochi concetti elementari.
Da ciò consegue che non è solo facile da scrivere (come il perl), ma è anche molto facile da leggere e da comprendere (al contrario del perl), perché in certo modo obbliga lo sviluppatore alla chiarezza.
Inoltre, il sistema interno di autodocumentazione del codice favorisce e stimola la produzione di commenti esplicativi.

2) Python è un linguaggio sintetico, data la sua natura di HLL e la sua recente progettazione, pur rimanendo leggibile. Ne consegue che, a parità di semantica, occorre fisicamente digitare meno caratteri rispetto ad altri linguaggi. In termini quantitativi statistici, fatto 100 il numero di LOC di un programma C++ o java che svolge un determinato compito, l'equivalente Python richiede sovente meno del 30%.
Appare superfluo rimarcare che un sorgente breve è più mantenibile e più facilmente comprensibile rispetto ad un sorgente lungo, criptico e dispersivo...
Aggiungo qui un singolo, semplice esempio di codice per mostrare con quale naturalezza Python gestisce oggetti di elevata complessità, come gli array associativi (ovvero coppie chiave:valore, dette dizionari) e le tuple:

codice:
Dict = {}
Dict[(0,2,4)] = 69
Dict[(3,4,5)] = "La prima terna pitagorica"

X = 0; Y = 2; Z = 4
Tup1 = (X,Y,Z)
Tup2 = (3,4,5)
Tup3 = (X+2,Y-1,Z)

print Dict[(X,Y,Z)]
print Tup1, Dict[Tup1]
print Tup2, Dict[Tup2]
print Dict

if Dict.has_key(Tup3):
     print Dict[Tup3]
else:
     print 0
3) La portabilità è quella tipica dei linguaggi interpretati, e all'atto pratico si traduce generalmente in "Qualsiasi piattaforma per la quale esista un interprete Python". Particolare forse poco noto, il nostro amico Python spunta fuori anche in device e appliance ai confini tra il mobile e l'embedded, come system language, su piattaforme ARM o simili. A proposito di veri sistemi embedded: ho notato che è scritto in Python un numero crescente di tools di configurazione e monitoraggio su PC per sistemi critici di vario genere, dal controllo di processo avanzato ai protocolli aerospaziali emergenti (ad esempio i protocol processor TTP di OnSemi e AMS).

4) Le librerie di Python sono decisamente molto articolate e complete. In particolare, il linguaggio risulta (casualmente !) molto amato nella vastissima e variegata comunità del calcolo numerico, prevedendo una ampia serie di librerie per usi scientifici (numpy, sympy, pylab...) in grado a volte di competere alla pari con le corrispondenti features dei grandi applicativi dedicati: Matlab, Mathcad, Maple, Mathematica, Derive, SPSS, Systat...

5) Python è estensibile, opensource, incorporabile (come scripting engine) e per natura totalmente aperto all'interazione con C, C++, java, e anche COM, dotnet, SOAP, CORBA, XML...

6) Python è un linguaggio "moderno" nel vero senso del termine. Orientato al dominio del problema, supporta tipi dinamici, garbage collection automatica, full OOP con un ricco set di oggetti e operatori predefiniti, liste e dizionari tra i tipi di base, potenti tools di libreria... c'è sicuramente da divertirsi ad utilizzarlo, sia per i giovani che i per i programmatori più navigati.
Inoltre il nome del linguaggio è ispirato direttamente al gruppo comico dei Monty Python, il che depone certamente a favore del divertimento...


Naturalmente non si deve dimenticare che Python è, e rimane, un linguaggio interpretato, incorporabile come suggerito sopra in applicazioni di grandi dimensioni scritte in C o C++ come linguaggio di scripting. Pertanto le prestazioni assolute non sono certo il suo punto di forza: la lentezza di esecuzione di taluni costrutti iterativi rimane tangibile anche sulle macchine più anabolizzate, sebbene talune librerie dedicate siano scritte in Assembly e C per fornire un certo grado di ottimizzazione degli inner loops.


Python è riccamente documentato, e il sito di riferimento ufficiale riporta una vastissima rete di link per tutti gli approfondimenti del caso. Aggiungo solo un minimo di bibliografia cartacea di riferimento.

[1] Marco Beri, "Python Pocket", Apogeo

[2] B. Dayley, "Python in tasca", Pearson Ed.

[3] Mark Lutz, "Imparare Python", Tecniche Nuove

[4] H.P. Langtangen, "Python scripting for computational science", Springer-Verlag

aggiornamento da 06-01-2017 a 00:50 di M.A.W. 1968

Categorie
Programmazione , Open Source

Commenti

  1. L'avatar di Master85
    Ciao Daniele,

    ottimo blog! Come sempre

    Oltre ai riferimenti indicati, vorrei aggiungerne altri:
    • La documentazione ufficiale del linguaggio che è liberamente scaricabile dal sito di riferimento Python Doc;

    • Django, per lo sviluppo di applicazioni web;

    • Ancora, riguardo GUI Programming in Python, la mia scelta personale è caduta su wxPython (libreria grafica multi-piattaforma, compatibile con GNU/Linux, Microsoft Windows e Mac OSX).
    aggiornamento da 14-02-2015 a 02:38 di Master85