Python
Python č un potente linguaggio di programmazione interpretato creato da Guido van Rossum. Prende il nome dalla serie televisiva Monty Python's Flying Circus.
Table of contents |
2 Tipi di dati e strutture 3 Sintassi 4 Libreria standard 5 Altre caratteristiche 6 Varie 7 Collegamenti esterni |
Filosofia
Python č un linguaggio multi-paradigma. Infatti permette in modo agevole di scrivere programmi seguendo il paradigma object oriented, oppure la programmazione strutturata, oppure la programmazione funzionale. Il controllo dei tipi viene fatto a runtime (dynamic typing) e usa un garbage collector per la gestione automatica della memoria.
Python ha qualche similaritĂ con Perl, ma i suoi progettisti hanno scelto la via di una sintassi molto piů essenziale e uniforme, con l'obiettivo di aumentare la leggibilitĂ del codice. Come il Perl spesso č classificato linguaggio di scripting, ma pur essendo utile per scrivere script di sistema (in alternativa ad esempio a bash), la grande quantitĂ di librerie disponibili e la facilitĂ con cui questo linguaggio permette di scrivere software modulare favoriscono anche lo sviluppo di applicazioni molto complesse.
Python ha un gran numero di tipi base. Oltre ai tipi interi e floating point classici, supporta trasparentemente numeri interi arbitrariamente grandi e numeri complessi.
Supporta tutte le operazione classiche sulle stringhe con questa eccezione: le stringhe in Python sono oggetti immutabili, cosicchč qualsiasi operazione che in qualche modo potrebbe alterare una stringa (come ad esempio la sostituzione di un carattere) restituirĂ invece una nuova stringa.
Essendo il Python a tipizzazione dinamica, tutte le variabili sono in realtà semplici puntatori ad oggetto (reference), sono gli oggetti invece ad essere dotati di tipo. Ad esempio ad una variabile cui era assegnato un intero, un istante dopo può essere assegnata una stringa o un array.
In Python c'č un moderato controllo dei tipi a runtime. Si ha conversione implicita per i tipi numerici, per cui si può ad esempio moltiplicare un numero complesso per un intero, ma non c'č ad esempio conversione implicita tra numeri e stringhe, per cui un numero č un argomento non valido per le operazioni su stringa.
Python ha una serie di tipi contenitori come ad esempio liste, tuple e dizionari. Liste, tuple e stringhe sono sequenze e condividono la maggior parte dei metodi: si può iterare sui caratteri di una stringa con la stessa facilità con cui lo si può fare sugli elementi di una lista. Le liste sono array estendibili, invece le tuple sono array immutabili di lunghezza prefissata.
Altri contenitori di grande utilitĂ sono i dizionari, conosciuti in altri contesti con il nome di hash table oppure array associativi. Come chiavi dei dizionari possono essere usati solo oggetti immutabili, in modo che in ogni caso sia preservata la consistenza, invece come valori associati alla chiave vanno bene oggetti arbitrari.
Il sistema dei tipi Python č ben integrato con il sistema delle classi. Anche se i tipi base non sono precisamente classi, una classe può ereditare da essi. In questo modo č possibile estendere stringhe, dizionari, ... o perfino gli interi. L'ereditarietĂ multipla č supportata.
Vengono supportate anche funzionalitĂ estensive di introspezione sui tipi e sulle classi. I tipi e le classi sono a loro volta oggetti che possono essere esplorati e confrontati. Gli attributi sono gestiti in un dizionario.
Python č stato progettato in modo da essere altamente leggibile. Visivamente si presenta in modo molto semplice e ha pochi costrutti sintattici rispetto a molti altri linguaggi strutturati come C, Perl o Pascal.
Per esempio, Python ha solo due forme di ciclo -- for, che cicla sugli elementi di una lista o su di un iteratore (come il foreach del Perl); e while, che cicla fin tanto che l'espressione booleana indicata risulta vera. In sostanza manca dei cicli in stile C for, do...while, oppure di un until in stile Perl, ma tutti questi naturalmente possono essere espressi con dei semplici equivalenti. Allo stesso modo ha solamente il costrutto if...elif...else per le scelte condizionate -- niente switch oppure goto.
Una cosa inusuale del Python č il metodo che usa per delimitare i blocchi di programma, che lo rende unico fra tutti i linguaggi piů diffusi.
Nei linguaggi derivati dall'Algol -- come ad esempio Pascal, C e Perl -- i blocchi di codice sono indicati con le parentesi oppure con parole chiave. (Il C ed il Perl usano { }; il Pascal usa begin ed end.) In questi linguaggi č solo una convenzione degli sviluppatori il fatto di indentare il codice interno ad un blocco, per metterlo in evidenza rispetto al codice circostante.
Python, invece, prende a prestito una caratteristica dal meno noto linguaggio di programmazione Occam -- invece di usare parentesi o parole chiavi, usa l'indentazione stessa per indicare i blocchi nidificati. Di seguito un esempio per chiarire questo. La versione C e Python di funzioni che fanno la stessa cosa -- calcolare il fattoriale di un intero:
Fattoriale in C:
Come detto sopra, un altro punto di forza del Python č la disponibilitĂ di elementi che facilitano la programmazione funzionale. Come ci si può aspettare, questo rende ancora piů comodo operare con liste o altri tipi contenitore. Uno di questi costrutti č stato preso dal linguaggio funzionale Haskell e consente il "riempimento" di una lista, come possiamo vedere nel seguente esempio in cui vengono calcolate le prime cinque potenze di due:
In Python esiste la parola chiave lambda, ma i blocchi lambda possono contenere solo espressioni, non statement. Non sono quindi il modo piů generale per restituire una funzione. Si può usare invece la seguente tecnica, che restituisce una funzione il cui nome č definito in uno scope locale.
Le eccezioni permettono un controllo degli errori piů conciso ed affidabile rispetto a molti altri modi possibili usati in genere per segnalare errori o situazioni anomale. Le eccezioni sono thread-safe; non sovraccaricano il codice sorgente come fanno invece in C i controlli sui valori di errore ritornati, e inoltre possono facilmente propagarsi verso l'alto nello stack delle chiamate a funzione quando un errore deve venire segnalato ad un livello piů alto del programma.
Il modo di fare frequente consiste, invece che fare controlli preventivi, nell'eseguire direttamente l'azione desiderata e catturare invece le eventuali eccezioni che si verificassero.
Python ha una vasta libreria standard, il che lo rende adatto a molti impieghi.
Inoltre ai moduli della libreria standard se ne possono aggiungere altri scritti in C oppure Python per soddisfare le proprie esigenze particolari. Tra i moduli giĂ disponibili ce ne sono per scrivere applicazioni web (sono supportati MIME, HTTP e tutti gli altri standard internet). Sono disponibili anche moduli per creare applicazioni con interfaccia grafica, per connettersi a database relazionali, per usare le espressioni regolari e per fare molte altre cose.
La libreria standard č uno dei punti forti di Python. Essa infatti compatibile con tutte le piattaforme, ad eccezione di poche funzioni, segnalate chiaramente nella documentazione come specifiche di una piattaforma particolare. Grazie a questo generalmente anche programmi Python molto grossi possono funzionare su Linux, Mac, Windows e altre piattaforme senza dover essere modificati.
Tipi di dati e strutture
Contenitori standard
Organizzazione ad oggetti
Sintassi
Uso degli spazi
int fattoriale(int x) {
if (x == 0) {
return(1);
} else {
return(x * fattoriale(x-1));
}
}
Fattoriale in Python:
def fattoriale(x):
if x == 0:
return 1
else:
return x * fattoriale(x-1)
All'inizio questo modo di indicare i blocchi può confondere le idee a chi viene da altri linguaggi, ma poi si rivela molto vantaggioso, perchč risulta molto conciso e obbliga a scrivere sorgenti indentati correttamente, aumentando alquanto la leggibilitĂ del codice quando passa di mano in mano.Programmazione funzionale
numeri = [1, 2, 3, 4, 5]
potenze_di_due = [ 2 ** n for n in numeri ]
Dal momento che Python permette di avere funzioni come argomenti, č anche possibile avere costrutti funzionali piů sottili, come ad esempio la continuation.def add_and_print_maker(x):
def temp(y):
print "%d + %d = %d" % (x, y, x+y)
return temp
Gestione delle eccezioni
Python supporta e usa estensivamente la gestione delle eccezioni come un mezzo per controllare la presenza di eventuali condizioni di errore. Addirittura č possibile intercettare l'eccezione generata da un errore di sintassi (syntax error)!Libreria standard
Altre caratteristiche
Come il Lisp e a differenza del Perl, l'interprete Python supporta anche un modo d'uso interattivo attraverso il quale č possibile inserire codice direttamente da un terminale, vedendo immediatamente il risultato. Questo č un bel vantaggio per chi sta imparando il linguaggio, ma anche per gli sviluppatori esperti: brevi tratti di codice possono essere provati in modo interattivo prima di essere integrati nel programma principale. Python dispone anche di un framework per lo unit testing che permette di creare serie esaustive di test.Varie
Collegamenti esterni
-- La homepage