Introduzione al linguaggio Python [1]
Prima lezione di introduzione a Python
Python è un linguaggio di programmazione potente e di facile apprendimento. Utilizza efficienti strutture dati di alto livello e un semplice ma efficace approccio alla programmazione orientata agli oggetti. L'elegante sintassi di Python e la tipizzazione dinamica, unite alla sua natura di linguaggio interpretato, lo rendono ideale per lo scripting e lo sviluppo rapido di applicazioni in molte aree diverse e sulla maggior parte delle piattaforme.
L'interprete Python e l'ampia libreria standard sono liberamente disponibili, in file sorgenti o binari, per tutte le principali piattaforme sul sito web di Python, http://www.python.org, e possono essere liberamente distribuiti. Lo stesso sito contiene anche, oltre alle distribuzioni, puntatori a molti moduli Python liberi e gratuiti di terzi, interi programmi, strumenti di sviluppo e documentazione addizionale.
L'interprete Python è facilmente estendibile con nuove funzioni o tipi di dato implementati in C o C++ (o altri linguaggi richiamabili dal C). Python è anche adatto come linguaggio di estensione per applicazioni personalizzabili.
Questo tutorial introduce informalmente il lettore ai concetti e alle caratteristiche base del linguaggio e del sistema Python. È di aiuto avere un interprete Python a portata di mano per fare esperienza diretta, ma tutti gli esempi sono autoesplicativi, quindi il tutorial può essere letto anche a elaboratore spento.
Per una descrizione degli oggetti e dei moduli standard, si veda il documento http://docs.python.it/html/lib/lib.html (La libreria di riferimento di Python). http://docs.python.it/html/ref/ref.html (Il manuale di riferimento di Python) fornisce una definizione più formale del linguaggio. Se s'intendono scrivere estensioni in C o C++, si legga http://docs.python.it/html/ext/ext.html (Extending and Embedding the Python Interpreter) e http://docs.python.it/html/api/api.html (Python/C API Reference). Ci sono anche numerosi libri che si occupano in modo approfondito di Python.
Questo tutorial non si propone di essere onnicomprensivo e di coprire ogni singola funzionalità o anche solo quelle più comunemente usate. Vuole essere piuttosto un'introduzione alle caratteristiche più notevoli di Python e fornire un'idea precisa dello stile del linguaggio. Dopo averlo letto si sarà capaci di leggere e scrivere moduli e programmi in Python, e quindi pronti ad imparare di più sui vari moduli della libreria Python descritta nel documento La libreria di riferimento di Python.
1. Per stimolarvi l'appetito
Se in qualche occasione avete scritto uno script di shell di grosse dimensioni, è probabile che la sensazione seguente vi sia familiare. Vorreste tanto aggiungere ancora un'altra funzione, ma è già così lento, così grosso, e così complicato; oppure la funzionalità che avete in mente necessita di una chiamata di sistema o di un'altra funzione accessibile solo da C...
Di solito il problema in esame non è abbastanza rilevante da giustificare una riscrittura dello script in C; magari richiede stringhe di lunghezza variabile o altri tipi di dati (come liste ordinate di nomi di file) che sono semplici da gestire dalla shell ma richiedono molto lavoro per essere implementati in C, o forse non avete familiarità sufficiente col C.
Un'altra situazione: forse dovete lavorare con parecchie librerie C, e la solita procedura C di scrittura/compilazione/test/ricompilazione è troppo lenta. Avete la necessità di sviluppare i programmi in tempi più brevi. Magari avete scritto un programma che potrebbe usare un linguaggio di estensione, e non volete stare a progettare un linguaggio, scrivere e testare un interprete per esso e poi congiungerlo alla vostra applicazione.
In casi simili, Python potrebbe essere quello che fa per voi. Python è semplice da usare ma è un vero linguaggio di programmazione, che offre molte più strutture e supporto per programmi di grandi dimensioni che i linguaggi di shell. D'altra parte, offre anche il controllo degli errori del C e, essendo un linguaggio di altissimo livello, ha tipi di dato built-in (NdT: nativi) di alto livello, come array flessibili e dizionari, che prenderebbero molto tempo per essere implementati in maniera efficiente in C. Grazie ai suoi tipi di dati di applicazione più generale, Python è applicabile a un insieme di problemi molto più vasto di Awk o anche Perl, cionondimeno molte cose sono semplici in Python almeno quanto in questi linguaggi.
Python permette di suddividere i vostri programmi in moduli che possono essere riutilizzati in altri programmi Python. È accompagnato da un'ampia raccolta di moduli standard che potete usare come basi per i vostri programmi, o come esempi utili nell'apprendimento della programmazione in Python. Ci sono anche moduli built-in che forniscono il supporto per cose come l'I/O su file, chiamate di sistema, socket e anche interfacce a toolkit GUI (Interfaccia Utente Grafica) come Tk.
Python è un linguaggio interpretato, e questo può far risparmiare molto tempo durante lo sviluppo del programma, poiché non sono necessari compilazione e linking. L'interprete può essere utilizzato interattivamente, il che rende semplice fare esperimenti con le funzionalità del linguaggio, scrivere programmi usa-e-getta o testare funzioni durante lo sviluppo bottom-up di programmi. È anche un'utile calcolatrice.
Python consente di scrivere programmi molto compatti e di facile lettura. Tipicamente i programmi scritti in Python sono molto più brevi degli equivalenti in C o C++, per numerose ragioni:
- i tipi di dati di alto livello consentono di esprimere operazioni complesse in una singola istruzione;
- le istruzioni vengono raggruppate tramite indentazione invece che con parentesi di inizio/fine;
- non è necessario dichiarare variabili e argomenti.
Python è estendibile: se sapete programmare in C è facile aggiungere all'interprete nuove funzioni o moduli built-in, per eseguire operazioni critiche alla massima velocità o per creare link a programmi Python delle librerie che possono essere disponibili solo in forma di file binari (ad esempio librerie grafiche proprietarie). Quando sarete veramente smaliziati, potrete creare link dall'interprete Python a un'applicazione scritta in C e usarlo come linguaggio di estensione o di comando per tale applicazione.
A proposito, l'origine del nome deriva dallo show televisivo della BBC Monty Python's Flying Circus e non ha niente a che fare con i pericolosi rettili omonimi. Fare riferimento alle caratteristiche burle dei Monty Python nella documentazione non solo è permesso, è incoraggiato!
Ora che la vostra curiosità nei confronti di Python è stata stimolata, vorrete esaminarlo in maggior dettaglio. Dato che il modo migliore di imparare un linguaggio è usarlo, siete invitati a farlo.
Nel prossimo capitolo verranno spiegati i meccanismi per utilizzare l'interprete. Si tratta di informazioni abbastanza banali, ma essenziali per lavorare sugli esempi che verranno mostrati più avanti.
Il resto del tutorial introdurrà varie caratteristiche e funzionalità del linguaggio (e sistema) Python attraverso esempi, iniziando con semplici espressioni, istruzioni e tipi di dati, passando per funzioni e moduli, per finire col toccare concetti avanzati come le eccezioni e le classi definite dall'utente.
2. Usare l'interprete Python
2.1 Invocare l'interprete
L'interprete Python sulle macchine Unix sulle quali è disponibile di solito è installato in /usr/local/bin/; aggiungendo /usr/local/bin al percorso di ricerca della shell è possibile farlo partire digitando il comando:
python
dalla shell. Dato che la directory in cui collocare l'interprete può essere scelta al momento dell'installazione, è possibile collocarlo altrove; in caso si consulti il proprio guru Python locale o l'amministratore di sistema (per esempio, /usr/local/python è un'alternativa diffusa).
Digitare un carattere di EOF (Control-D su Unix, Control-Z su Windows) al prompt primario fa sì che l'interprete esca con uno status pari a zero. Se non funziona, si può uscire digitando i seguenti comandi:
import sys; sys.exit()
Le funzioni di editing di riga dell'interprete di solito non sono molto sofisticate. Su Unix, chiunque abbia installato l'interprete può avere abilitato il supporto per la libreria GNU readline, che aggiunge funzionalità di storico e di editing interattivo più avanzate. Forse il modo più rapido di controllare se sia supportato l'editing della riga di comando è di digitare Control-P al primo prompt Python che si riceve. Se viene emesso un 'beep', l'editing è abilitato; si veda l'Appendice http://docs.python.it/html/tut/node14.html#interacting (A) per un'introduzione ai comandi da tastiera. Se sembra che non accada nulla, o se si ha un echo di P, allora l'editing della riga di comando non è disponibile; si potrà solamente utilizzare il tasto Indietro ('backspace') per cancellare caratteri dalla riga corrente.
L'interprete opera all'incirca come una shell Unix: quando viene lanciato con lo standard input connesso ad un terminale legge ed esegue interattivamente dei comandi; quando viene invocato con il nome di un file come argomento o con un file come standard input legge ed esegue uno script da quel file.
Un secondo modo di lanciare l'interprete è tramite "
python -c comando [arg] ...", che esegue la/e istruzione/i contenuta/e in comando, analogamente a quanto succede per l'opzione -c della shell. Dato che spesso le istruzioni Python contengono spazi o altri caratteri che la shell considera speciali, è molto meglio racchiudere integralmente comando tra doppie virgolette.
Si noti che c'è una differenza tra python file e python < file. Nel secondo caso le richieste di input del programma, ad esempio chiamate ad
input()e
raw_input(), vengono soddisfatte da file. Dato che questo file è già stato letto fino alla fine dall'analizzatore sintattico ('parser') prima che il programma venga effettivamente eseguito, il programma si imbatterà immediatamente in EOF. Nel primo caso (che di solito è quello più utile) le richieste vengono soddisfatte da qualunque file o dispositivo sia connesso allo standard input dell'interprete Python.
Quando si usa un file di script, talvolta è utile poter lanciare lo script e successivamente entrare in modalità interattiva. Lo si può ottenere passando l'opzione -i prima dello script. Non funziona se lo script viene letto dallo standard input, per lo stesso motivo illustrato nel paragrafo precedente.
2.1.1 PASSAGGIO DI ARGOMENTI
Quando noti all'interprete, il nome dello script e gli argomenti addizionali sono passati allo script tramite la variabile
sys.argv, che è una lista di stringhe. La sua lunghezza minima è uno; quando non vengono forniti né script né argomenti,
sys.argv[0]è una stringa vuota. Quando il nome dello script è fornito come
'-'(che identifica lo standard input),
sys.argv[0]viene impostato a
'-'. Allorché viene usato -c comando,
sys.argv[0]viene impostato a
-c. Le opzioni trovate dopo -c comando non vengono consumate nell'elaborazione delle opzioni da parte dell'interprete Python, ma lasciate in
sys.argvper essere gestite dal comando.
2.1.2 Modo interattivo
Quando i comandi vengono letti da un terminale, si dice che l'interprete è in modalità interattiva. In questa modalità esso presenta, in attesa del prossimo comando, un prompt primario, composto di solito da tre segni consecutivi di maggiore ("<<"); per le righe di continuazione il prompt predefinito è quello secondario, tre punti consecutivi ("..."). L'interprete stampa a video un messaggio di benvenuto in cui compare il numero di versione e un avviso di copyright prima del prompt iniziale, p.e.:
Python 1.5.2b2 (#1, Feb 28 1999, 00:02:06) [GCC 2.8.1] on sunos5 Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam <<<
Le righe di continuazione sono necessarie quando si introduce un costrutto multiriga.
Nella prossima lezione vedremo un'introduzione più pratica a questo linguaggio di programmazione e faremo qualche primo esempio di codice!