Tu sei qui:HomeAbstractI nostri strumentiPython

Python

è un potente linguaggio di programmazione interpretato creato da Guido van Rossum. Prende il nome dalla serie televisiva Monty Python's Flying Circus; è un linguaggio multi-paradigma. 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. Dalla versione 2.4 sono disponibili anche i numeri decimali (decimal), ovvero numeri con la virgola a precisione illimitata, come quelli disponibili in Rexx o in Cobol, che non soffrono di problemi di arrotondamento e stabilità tipici dei numeri floating point classici. 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.

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. 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. 

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:

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. Lo svantaggio è che la gestione degli spazi e dei caratteri di tabulazione può essere diversa da un editor all'altro, il che costringe a fare attenzione nell'indentare il codice, oppure ad affidarsi alle funzioni di indentazione automatica ormai presenti nella maggior parte degli editor di programmi.

La velocità di esecuzione non è uno dei punti di forza di Python, esso è anzi piuttosto lento, specie nel calcolo matematico. Esiste un'estensione, Psyco, che è una sorta di compilatore JIT e permette di velocizzare in modo notevole alcuni tipi di codice. Comunque, anche in questo modo un qualunque compito che preveda numerosi calcoli non è adatto ad un programma Python.

Azioni sul documento