
























































































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Testo PDF guida per linguaggio di programmazione PYTHON
Tipologia: Guide, Progetti e Ricerche
1 / 96
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!

























































































Copyright c© 2001-2004 Python Software Foundation. All rights reserved.
Copyright c© 2000 BeOpen.com. All rights reserved.
Copyright c© 1995-2000 Corporation for National Research Initiatives. All rights reserved.
Copyright c© 1991-1995 Stichting Mathematisch Centrum. All rights reserved.
Vedete alla fine di questo documento per informazioni più dettagliate su licenze e permessi.
Traduzione in italiano
Per quanto riguarda la traduzione di questo documento hanno collaborato molti volontari, nel più puro spirito del “free software”, con l’intento di rendere disponibile a tutti questo manuale nella lingua italiana.
Traduzione in Italiano del Manuale di riferimento di Python , sotto la coordinazione di Ferdinando Ferranti zap[ at ]zonapython.it, hanno collaborato a tradurre, in ordine alfabetico:
Un ringraziamento particolare ad Enrico Morelli morelli[ at ]cerm.unifi.it che ha contribuito in modo determinante al rilascio di questo manuale effettuando una minuziosa revisione.
costanti letterali, separati da tre punti significano una scelta di un singolo carattere nell’intervallo indicato (estremi inclusi) di caratteri ASCII. Una frase tra parentesi angolari (<...>) da una descrizione informale del simbolo definito; per esempio, questo può essere utilizzato nel descrivere la nozione di carattere di controllo, se necessario.
Anche se la notazione utilizzata è pressoché la stessa, c’è una grande differenza tra il significato delle definizioni lessicali e quelle sintattiche: una definizione lessicale opera su caratteri individuali del sorgente in input, mentre una definizione sintattica opera sulla sequenza di token generati dall’analisi lessicale. Tutti gli utilizzi di BNF nel prossimo capitolo (“Analisi Lessicale”) sono definizioni lessicali; quelle nei capitoli successivi sono definizioni sintattiche.
2 Capitolo 1. Introduzione
Un programma Python viene letto da un parser. L’input da analizzare è una sequenza di token , generati dall’ analizzatore lessicale. Questo capitolo descrive come l’analizzatore lessicale divide il file in token.
Python utilizza il set di caratteri ASCII a 7 bit per il testo del programma. Nuovo nella versione 2.3: può essere dichiarata una codifica per indicare che le stringhe costanti manifeste ed i commenti sono in una codifica diversa da ASCII. uer compatibilità con vecchie versioni, Python vi avvisa solo se trova caratteri ad 8 bit; questi avvertimenti devono essere corretti utilizzando una specifica codifica o utilizzando delle sequenza di escape (NdT: di protezione) se questi byte sono dati binari anziché caratteri.
L’insieme di caratteri a runtime dipende dal dispositivo di I/O connesso al programma, ma è generalmente un superinsieme di ASCII.
Note di compatibilità futura: si può essere tentati di assumere che l’insieme di caratteri per i caratteri ad 8 bit sia ISO Latin-1 (un superinsieme ASCII che copre la maggior parte dei linguaggi dell’ovest che usano l’alfabeto latino), ma è possibile che in futuro gli editor di testo Unicode diventino di uso comune. Questi generalmente utilizzano la codifica UTF-8, che è sempre un superinsieme ASCII, ma utilizza in modo diverso i caratteri con un valore numerico tra 128 e 255. Mentre non c’è ancora consenso su questo, è sconsigliabile dare per scontato Latin-1 o UTF-8, anche se l’implementazione corrente appare in favore di Latin-1. Questo si applica sia al codice sorgente che all’insieme di caratteri a runtime.
Un programma Python è diviso in un certo numero di righe logiche.
La fine di una riga fisica è rappresentato dal token NEWLINE. Le dichiarazioni non possono attraversare i limiti delle righe logiche ad eccezione di dove NEWLINE è ammesso dalla sintassi (per esempio tra istruzioni in “com- pount statements”). Una riga logica è costituita da una o più righe fisiche seguendo le regole implicite o esplicite di unione tra righe.
Una riga fisica termina dove si trova il terminatore di riga, secondo la convenzione della piattaforma corrente. Su UNIX, è il carattere ASCII LF (linefeed). Su Windows è la sequenza ASCII CR LF (return seguito da linefeed). Su Macintosh è il carattere ASCII CR (return).
Un commento inizia con un carattere cancelletto (#) che non sia parte di una stringa costante manifesta e termina alla fine della riga fisica. Un commento indica la fine di una riga logica, a meno che non siano invocate speciali regole di unione. I commenti vengono ignorati dalla sintassi; non sono token.
tinuazione implicite. Le righe di continuazione implicite possono capitare anche in stringhe con tripla quotatura (vedete sotto); in questo caso non possono contenere commenti.
Una riga logica che contiene solo spazi, tabulazioni, avanzamenti di pagina e facoltativamente un commento, viene ignorata (cioè non viene generato un token NEWLINE). Durante sessioni interattive di istruzioni in input, la ge- stione delle righe vuote può differire a seguito dell’implementazione del ciclo di lettura-valutazione-stampa. Nel- l’implementazione standard, una riga logica interamente vuota (cioè priva di caratteri di spaziatura o commenti) termina un’istruzione multiriga.
I caratteri di spaziatura (spazi e tab) all’inizio di una riga logica, vengono utilizzati per computare il livello di indentazione di questa riga; in pratica determina il raggruppamento delle istruzioni.
Come prima cosa, i tab vengono sostituiti (da sinistra a destra) da un numero di spazi variabile da uno ad 8, in modo che il numero totale di caratteri incluso la sostituzione sia un multiplo di otto (questo si intende come la regola utilizzata dai sistemi UNIX). Il numero totale di spazi che precedono il primo carattere che non sia di spaziatura determinano quindi l’indentazione della riga. L’indentazione non può essere divisa su più righe fisiche utilizzando i backslash; gli spazi fino al primo backslash determinano il livello di indentazione.
Note di compatibilità su diverse piattaforme: a causa della natura degli editor di testo sui sistemi non UNIX, non è consigliato utilizzare un misto di spazi e tab per indentare una singola riga di codice sorgente. Si deve anche notare che differenti piattaforme possono limitare il numero massimo di livelli di indentazione.
Un carattere di avanzamento di pagina può essere presente all’inizio di una riga; verrà ignorato per il calcolo dell’indentazione. Caratteri di avanzamento di pagina che occorrano altrove avranno un effetto non specificato (per esempio, possono azzerare il contatore degli spazi).
Livelli di indentazione di righe consecutive vengono utilizzati per generare i token INDENT e DEDENT, utilizzando uno stack, come di seguito.
Prima che venga letta la prima riga del file, un singolo zero viene messo sullo stack; questo non verrà mai rimosso. Il numero messo nello stack sarà sempre strettamente crescente, dal fondo alla cima. All’inizio di ogni riga logica, il livello di indentazione della riga viene confrontato con la cima dello stack. Se uguale non accade niente. Se è maggiore, viene messo nello stack e viene generato un token INDENT. Se minore, deve essere uno dei numeri presenti nello stack; tutti i numeri maggiori vengono eliminati dallo stack e, per ognuno di questi, viene generato un token DEDENT. Alla fine del file viene generato un token DEDENT per ogni numero rimasto nello stack che sia maggiore di zero.
Ecco un esempio di una porzione di codice python correttamente indentato, anche se fuorviante:
def perm(l):
if len(l) <= 1: return [l] r = [] for i in range(len(l)): s = l[:i] + l[i+1:] p = perm(s) for x in p: r.append(l[i:i+1] + x) return r
L’esempio seguente mostra vari errori di indentazione:
2.1. Struttura delle righe 5
def perm(l): # errore: prima linea indentata for i in range(len(l)): # errore: non indentato s = l[:i] + l[i+1:] p = perm(l[:i] + l[i+1:]) # errore: indentazione inaspettata for x in p: r.append(l[i:i+1] + x) return r # errore: deindentazione inconsistente
In verità, i primi tre errori vengono intercettati dal parser; solo l’ultimo viene intercettato dall’analizzatore lessicale — l’indentazione di return r non corrisponde ad un livello estratto dallo stack.
Ad eccezione dell’inizio di una riga logica o una stringa costante, i caratteri di spaziatura (spazi, tab e avanzamento di pagina) possono essere utilizzati in modo intercambiabile per separare i token. Una spaziatura è necessaria tra due token solo se la loro concatenazione possa altrimenti essere interpretata come un token differente (per esempio ab è un token, ma a e b sono due token).
2.2 Altri token
A parte NEWLINE, INDENT e DEDENT, esistono le seguenti categorie di token: identifiers , keywords , literals , operators e delimiters (NdT: identificatori, parole chiave, costanti manifeste, operatori e delimitatori). I caratteri di spaziatura (a parte i terminatori di riga, come discusso precedentemente) non sono token, ma servono per delimitare i token. Quando esiste un’ambiguità, un token comprende la maggior porzione di stringa che possa formare un token legale, quando letto da sinistra a destra.
2.3 Identificatori e keywords
Gli identificatori (anche chiamati nomi ) sono descritti dalle seguenti definizioni lessicali:
identifier ::= (letter|_) (letter | digit | _)* letter ::= lowercase | uppercase lowercase ::= a...z uppercase ::= A...Z digit ::= 0...
Gli identificatori possono essere di lunghezza arbitraria. La distinzione tra lettere maiuscole e minuscole è significativa.
I seguenti identificatori vengono utilizzati come parole riservate o parole chiave del linguaggio e non possono essere utilizzati come identificatori ordinari. Devono essere scritti esattamente come sono scritti qui:
and del for is raise assert elif from lambda return break else global not try class except if or while continue exec import pass yield def finally in print
6 Capitolo 2. Analisi lessicale
Nelle stringhe a quotatura tripla, vengono ammessi e mantenuti i fine riga e le quotature singole senza escape, ad eccezione del fatto che tre quotature senza escape in una riga terminano la stringa. (Un carattere di “quotatura” è il carattere utilizzato per aprire la stringa, cioè sia ’ che ).
A meno che il prefisso ‘r’ o ‘R’ non sia presente, le sequenze di escape in una stringa vengono interpretate in accordo a regole simili a quelle utilizzate nello standard C. Le sequenze di escape riconosciute sono:
Sequenza di escape Significato Note \ newline Ignorato \ Backslash () \’ Carattere di quotatura singola (’) \ Carattere di quotatura doppia () \a ASCII Bell (BEL) \b ASCII Backspace (BS) \f ASCII Formfeed (FF) \n ASCII Linefeed (LF) \N{ name } Carattere chiamato name nel database Unicode (solamente in Unicode) \r ASCII Carriage Return (CR) \t ASCII Tab orizzontale (TAB) \u xxxx Carattere con valore esadecimale a 16 bit xxxx (valido solo per Unicode) (1) \U xxxxxxxx Carattere con valore esadecimale a 32 bit xxxxxxxx (valido solo per Unicode) (2) \v ASCII Tab verticale (VT) \ ooo Carattere ASCII con valore ottale ooo (3) \x hh Carattere ASCII con valore esadecimale hh (4)
Note:
(1) Unità di codice individuali che formano parte di un surrogato di una coppia, possono essere codificate utilizzando questa sequenza di escape. (2) Ciascun carattere Unicode può essere rappresentato in questo modo, ma i caratteri al di fuori del Basic Multilingual Plane (BMP) verranno codificati per utilizzare il surrogato di una coppia se Python è compilato per utilizzare unità di codice a 16 bit (il valore predefinito). Le unità di codice individuali che formano parti del surrogato di una coppia possono essere codificate utilizzando questa sequenza di escape.
(3) Come nello Standard C, fino a tre cifre ottali vengono accettate.
(4) Al contrario dello standard C, vengono accettate almeno 2 cifre esadecimali.
Al contrario dello standard C, tutte le sequenze di escape non riconosciute vengono lasciate nella stringa senza apportare modifiche, cioè il backslash viene lasciato nella stringa. (Questo comportamento è utile in fase di debug: se una sequenza di escape viene digitata male, dall’output risultante si riconosce più facilmente come errata). È anche importante notare che le sequenze di escape segnate come “(valide solamente per Unicode)” nella tabella sopra, finiscono nella categoria degli escape non riconosciuti per le stringhe costanti non Unicode.
Quando il prefisso ‘r’ o ‘R’ è presente, un carattere che segue un backslash viene incluso nella stringa senza subire modifiche e tutte i backslash vengono lasciati nella stringa. Per esempio, la stringa costante r\n consiste di due caratteri: un backslash e una ‘n’ minuscola. I caratteri di quotature possono essere soggetti ad escape con un backslash, ma il backslash rimane nella stringa; per esempio, r\“ è una stringa costante valida che consiste di due caratteri: un backslash e un carattere di quotatura doppio; r\ non è una stringa costante valida (anche una stringa raw non può terminare con un numero dispari di backslash). Specificamente, una stringa raw non può terminare con un singolo backslash (poiché il backslash farebbe l’escape dell’ultimo carattere di quotatura). Notare anche che un singolo backslash seguito da un fine riga viene interpretato come se questi due caratteri facessero parte della stringa, non come una continuazione di riga.
Quando un prefisso ‘r’ o ‘R’ viene usato in congiunzione con un prefisso ‘u’ o ‘U’, la sequenza di escape \uXXXX viene elaborata mentre tutte gli altri backslash vengono lasciati invariati nella stringa. Per esempio, la stringa costante ur\u0062\n consiste di tre caratteri Unicode: ‘LATIN SMALL LETTER B’, ‘REVERSE SOLIDUS’ e ‘LATIN SMALL LETTER N’. Si può effettuare l’escape di un backslash con un’altro backslash; comunque, entrambi rimangono nella stringa. Come risultato, le sequenze di escape \uXXXX vengono solo riconosciute quando c’è un numero dispari di backslash.
8 Capitolo 2. Analisi lessicale
Stringhe costanti manifeste multiple ed adiacenti (delimitate da caratteri di spaziatura), che possibilmente utilizza- no differenti convenzioni di quotatura, sono ammesse ed hanno lo stesso significato di una concatenazione. Perciò hello ’world’ è equivale ad helloworld. Questa funzionalità può essere utilizzata per ridurre il numero di backslash necessari, per suddividere stringhe lunghe in modo conveniente, attraverso lunghe righe o anche per aggiungere commenti ad alcune parti della stringa; per esempio:
re.compile("[A-Za-z_]" # lettere o sottolineature "[A-Za-z0-9_]*" # lettere, numeri o sottolineature )
Notate che questa funzionalità viene definita a livello sintattico, ma implementata al momento della compilazione. L’operatore ‘+’ deve essere utilizzato per concatenare stringhe a runtime. Notate anche che la concatenazione tra stringhe costanti manifeste può utilizzare diversi stili di quotatura per ogni componente (anche mischiando stringhe raw e stringhe a quotatura tripla).
Ci sono quattro tipi di costanti manifeste numeriche: interi, interi long, numeri in virgola mobile e numeri imma- ginari. Non ci sono costanti complesse (i numeri complessi possono essere formati sommando un numero reale ed un numero immaginario).
Si noti che le costanti numeriche non includono il segno; una frase come -1 è in realtà un’espressione composta dall’operatore unario ‘-’ e dalla costante numerica 1.
Le costanti di tipo intero e long vengono descritte dalle seguenti definizioni lessicali:
longinteger ::= integer (l | L) integer ::= decimalinteger | octinteger | hexinteger decimalinteger ::= nonzerodigit digit* | 0 octinteger ::= 0 octdigit+ hexinteger ::= 0 (x | X) hexdigit+ nonzerodigit ::= 1... octdigit ::= 0... hexdigit ::= digit | a...f | A...F
Anche se si puó utilizzare sia il suffisso ‘l’ che ‘L’ per indicare una costante long, è altamente raccomandato di utilizzare sempre ‘L’, poiché la lettera ‘l’ è troppo simile alla cifra ‘ 1 ’.
Le costanti intere che sono maggiori del più grande numero intero rappresentabile (per esempio 2147483647 quando si utilizza un’aritmetica a 32 bit) vengono accettate come se fossero costanti long. 1 Non c’é limite alla lunghezza delle costanti long, a parte la limitazione dovuta alla dimensione della memoria disponibile.
Alcuni esempi di costanti numeriche intere (prima riga) e long (seconda e terza riga):
7 2147483647 0177 3L 79228162514264337593543950336L 0377L 0x100000000L 79228162514264337593543950336 0xdeadbeef
(^1) Nelle versioni di Python precedenti alla 2.4, le costanti numeriche ottali ed esadecimali nell’intervallo subito sopra il più grande intero rap- presentabile, ma inferiore al più grande numero senza segno a 32 bit (su macchine con aritmetica a 32 bit), 4294967296, vengono considerate come il numero intero negativo ottenuto sottraendo 4294967296 al loro valore senza segno.
2.4. Literals 9
Il punto occorre anche nelle costanti numeriche reali ed immginarie. Una sequenza di tre punti ha un significato speciale come un’ellissi in una fetta. La seconda metà della lista, gli operatori di assegnamento e modifica, operano lessicalmente come delimitatori, ma effettuano anche delle operazioni.
I seguenti caratteri ASCII stampabili hanno un significato speciale come parte di altri token o sono altrimenti significativi per l’analizzatore lessicale:
’ " # \
I seguenti caratteri ASCII stampabili non vengono utilizzati in Python. La loro presenza fuori da stringhe costanti manifeste e commenti è un errore:
@ $?
2.6. Delimitatori 11