Di seguito una lista di tutti i tipi che vengono costruiti in Python. I moduli di estensione (scritti in C, Java o altri linguaggi, in funzione dell'implementazione) possono definire ulteriori tipi. Le future versioni di Python potranno aggiungere tipi alla gerarchia dei tipi (per esempio numeri razionali, array di interi memorizzati efficientemente, etc.).
Alcuni dei tipi descritti contengono un paragrafo che elenca gli `attributi speciali'. Questi sono attributi che forniscono accesso all'implemenatzione e non sono intesi per l'uso generale. La loro definizione potrà cambiare in futuro.
None
. Viene utilizzato per indicare l'assenza di un valore in
molte situazioni, per esempio, viene restituito dalle funzioni che non
restituiscono esplicitamente qualcosa. Il suo valore di verità è
``Falso''.
NotImplemented
. I metodi numerici ed i metodi di confronto
complessi possono restituire questo valore se non implementano
l'operazione per l'operando fornito. (L'interprete proverà quindi a
riflettere l'operazione, o altri metodi di fallback, a seconda
dell'operatore in questione.) Il suo valore di verità è ``Vero''.
Ellipsis
. Viene utilizzato per indicare la presenza di
"..." nella sintassi di una sequenza. Il suo valore di verità è
``Vero''.
Python distingue tra interi, numeri in virgola mobile e numeri complessi:
Ci sono tre tipi di interi:
"False"
e "True"
.
Il risultato per la rappresentazione degli interi è intesa per fare l'interpretazione più utile delle operazioni di scorrimento e per le maschere che riguardano i numeri negativi e le minori sorprese possibili quando si effettua un cambiamento tra il dominio degli interi plain e gli interi long. Ogni operazione, ad eccezione dello scorrimento a sinistra, se genera un risultato nel dominio degli interi plain senza generare overflow, genera lo stesso risultato nel dominio degli interi long o quando si utilizzano operandi misti.
z
possono essere recuperate attraverso degli
attributi in sola lettura z.real
e z.imag
.
a[i]
.
Le sequenza supportano anche l'affettamento:
a[i:j]
seleziona tutti gli elementi con
indice k tale che vari
<=
k <
j. Quando utilizzata come
un'espressione, una fetta è una sequenza dello stesso tipo. Questo
implica che l'insieme degli indici viene rinumerato in modo che inizi
da 0.
Alcune sequenze supportano anche l'``affettazione estesa'' con un
terzo parametro ``passo'': a[i:j:k]
seleziona tutti gli elementi di a con un indice x dove
x = i + n*k
, n >=
0
e i <=
x <
j.
Le sequenze si distinguono in base alla mutabilità:
I seguenti tipi sono sequenze immutabili:
(Nei sistemi in cui l'insieme di caratteri nativo non è ASCII, le stringhe possono utilizzare EBCDIC nella loro rappresentazione interna e le funzioni chr() ed ord() implementano una mappa tra ASCII e EBCDIC ed il confronto tra stringhe mantiene l'ordine ASCII. (O forse qualcuno può proporre una regola migliore?)
sys.maxunicode
e dipende da come è stato
configurato Python al momento della compilazione). Negli oggetti
Unicode possono essere presenti delle coppie surrogate e verranno
segnalate come due elementi separati. Le funzioni built-in
unichr() ed
ord() convertono tra le unità di codice ed
interi non negativi rappresentanti gli ordinali Unicode, come definito
nello Standard Unicode 3.0. Le conversioni da e verso le altre
codifiche sono possibili attraverso i metodi di codifica
encode degli oggetti Unicode e la funzione built-in
unicode()..
C'è attualmente un solo tipo intrinseco di sequenze mutabili:
Il modulo di estensione array fornisce un'esempio aggiuntivo di sequenze mutabili.
a[k]
seleziona l'elemento indicizzato k
dalla mappa a
; questo
può essere utilizzato nelle espressioni come obiettivo di un
assegnamento o di un'istruzione del (cancella). La funzione
built-in len() restituisce il numero di elementi in una
mappa.
C'è attualmente un solo tipo intrinseco di mappe:
1
e 1.0
) possono
essere usati in modo intercambiabile per indicizzare lo stesso
elemento del dizionario.
I dizionari sono mutabili; possono essere creati con la notazione
{...}
(si veda la sezione 5.2.5,
``Visualizzazione dei dizionari'').
I moduli di estensione dbm, gdbm, bsddb forniscono esempi aggiuntivi di mappe.
Attributi speciali: func_doc o __doc__ è la stringa
di documentazione (docstring) della funzione, o None
se
non disponibile; func_name o __name__ è il
nome della funzione; __module__ è il nome del modulo
in cui la funzione è stata definita o None
se non
disponibile; func_defaults è una tupla che contiene i valori
predefiniti per gli argomenti che hanno un valore predefinito oppure
None
se nessun argomento ha un valore predefinito;
func_code è un oggetto di tipo codice che rappresenta il
codice compilato del corpo della funzione; func_globals è (un
riferimento a) il dizionario che mantiene le variabili globali della
funzione -- questo definisce lo spazio dei nomi globale del modulo in
cui la funzione viene definita; func_dict o __dict__
contiene lo spazio dei nomi che sostiene gli attributi arbitrari di
funzione; func_closure è None
oppure una tupla di
celle che contengono le associazioni per le variabili libere della
funzione.
Di queste, func_code, func_defaults, func_doc/__doc__ e func_dict/__dict__ possono essere scrivibili; le altre non possono mai cambiare. Informazioni aggiuntive circa la definizione della funzione, possono essere recuperate dal suo oggetto di tipo codice; si veda la descrizione dei tipi interni sotto.
None
) ed un qualunque oggetto
chiamabile (normalmente una funzione definita dall'utente).
Attributi speciali in sola lettura: im_self è l'oggetto che
rappresenta l'istanza della classe; im_func è
l'oggetto che rappresenta la funzione; im_class è la classe
di im_self per i metodi associati (bound) o la classe a cui
chiedere il metodo per i metodi non associati (unbound);
__doc__ è la documentazione del metodo (lo stesso di
im_func.__doc__
); __name__ è il nome del metodo (lo
stesso di im_func.__name__
); __module__ è il nome del
modulo in cui il metodo è stato definito o None
se non
disponibile.
Modificato nella versione 2.2:
im_self referenzia la classe che definisce il
metodo.
I metodi supportano anche l'accesso (ma non l'impostazione) agli argomenti arbitrari della funzione nell'oggetto sottostante che rappresenta la funzione.
I metodi definiti dall'utente possono essere creati quando si recupera l'attributo di una classe (forse tramite un'istanza di quella classe), se questo attributo è una funzione definita dall'utente, un metodo definito dall'utente non associato o un metodo di classe. Quando l'attributo è un metodo definito dall'utente, un nuovo oggetto di tipo metodo viene creato solo se la classe da cui viene recuperato è la stessa o deriva dalla stessa classe o dalla classe immagazzinata nel metodo originale; altrimenti viene utilizzato il metodo originale.
Quando un metodo definito dall'utente viene creato recuperando una
funzione definita dall'utente da una classe, il suo attributo
im_self è None
e l'oggetto metodo si dice
essere non associato. Quando viene creato tramite una funzione
definita dall'utente da una classe attraverso una sua istanza, il suo
attributo im_self è l'istanza e l'oggetto metodo si dice
essere associato. In entrambi i casi, l'attributo im_class
del nuovo metodo è la classe da cui il recupero ha luogo e il suo
attributo im_func è l'oggetto funzione originale.
Quando un metodo definito dall'utente viene creato recuperando un'altro metodo da una classe o un'istanza, il comportamento è lo stesso che per un oggetto funzione, ad accezione del fatto che l'attributo im_func della nuova istanza non è l'oggetto che rappresenta il metodo originale, ma il suo attributo im_func.
Quando un metodo definito dall'utente viene creato recuperando un metodo di classe da una classe o un'istanza, il suo attributo im_self è la classe stessa (la stessa dell'attributo im_class) e il suo attributo im_func è l'oggetto funzione sottostante al metodo di classe.
Quando un metodo non associato definito dall'utente viene chiamato, la funzione sottostante (im_func) viene chiamata, con la restrizione che il primo argomento deve essere un'istanza della classe appropriata (im_class) o di un suo tipo derivato.
Quando un metodo associato definito dall'utente viene chiamato, la
funzione sottostante (im_func) viene chiamata,
inserendo l'istanza di classe (im_self) all'inizio
della lista di argomenti. Per esempio, quando C è una classe
che contiene una definizione per una funzione f() e x
è un'istanza di C, chiamare x.f(1)
è equivalente a
chiamare C.f(x, 1)
.
Quando un metodo definito dall'utente deriva da un metodo di classe,
``l'istanza di classe'' memorizzata in im_self sarà la classe
stessa, così chiamare x.f(1)
o C.f(1)
è equivalente a
chiamare f(C,1)
, dove f
è la funzione sottostante.
Notate che la trasformazione dalla funzione al metodo (associato o non associato) avviene ogni volta che l'attributo viene recuperato da una classe o un'istanza. In alcuni casi, un'ottimizzazione fruttuosa è assegnare l'attributo ad una variabile locale e chiamare la variabile locale. Notare anche che questa trasformazione avviene solo per una funzione definita dall'utente; gli altri oggetti eseguibili (e tutti gli oggetti non eseguibili) vengono recuperati senza trasformazione. È importante notare che le funzioni definite dall'utente che sono attributi di un'istanza di classe non vengono convertiti in metodi associati; questo avviene solamente quando la funzione è un'attributo della classe.
None
se non è disponibile;
__name__ è il nome della funzione; __self__ viene
impostato a None
(vedere comunque il prossimo paragrafo);
__module__ è il nome del modulo nel quale la funzione è stata
definita o None
se non è disponibile.
alist.append()
, assumendo alist come un oggetto
lista. In questo caso, l'attributo speciale di sola lettura
__self__ viene impostato all'oggetto rappresentato dalla
lista, list.
x(argomenti)
è una scorciatoia per
x.__call__(argomenti)
.
m.x
è equivalente a m.__dict__["x"]
.
Un oggetto modulo non contiene il codice oggetto usato per
inizializzare il modulo (dato che è già stato inizializzato una
volta).
L'assegnamento di attributi aggiorna il dizionario dello spazio dei nomi del modulo, per esempio, "m.x = 1" equivale a "m.__dict__["x"] = 1".
Attributi speciali di sola lettura: __dict__ è il dizionario dello spazio dei nomi del modulo.
Attributi predefiniti (modificabili): __name__ è il nome del
modulo; __doc__ è la stringa di documentazione del modulo o
None
se non è disponibile; __file__ è il percorso del
file da cui è stato caricato il modulo, se è stato caricato da un
file. L'attributo __file__ non è presente per i moduli C
che sono linkati staticamente nell'interprete; per estensioni di
moduli caricati dinamicamente da librerie condivise, è il percorso del
file della libreria condivisa.
Quando un riferimento ad un attributo di classe (per una classe C) deve produrre una funzione definita dall'utente o uno slegamento di un metodo definito dall'utente la cui classe associata è sia C che ad una delle sue classi di base, viene trasformato in un metodo slegato definito dall'utente il cui attributo im_class è C. Nel caso dovesse produrre un metodo di classe, viene trasformato in un metodo legato definito dall'utente i cui attributi im_class e im_self sono entrambi C. Mentre nel caso dovesse produrre un metodo statico, viene trasformato in un oggetto wrapped dal metodo statico. Vedere la sezione 3.3.2 per altri modi in cui gli attributi ricevuti da una classe possono differire da quelli attualmente contenuti nel proprio __dict__.
L'assegnamento di attributi di una classe aggiornano il dizionario della classe e mai il dizionario della classe di base.
Un oggetto classe può essere chiamato (vedere sopra) per produrre un'istanza di una classe (vedere di seguito).
Attributi speciali: __name__ è il nome della classe;
__module__ è il nome del modulo in cui è definita la classe;
__dict__ è il dizionario contenente lo spazio dei nomi della
classe; __bases__ è una tupla (forse vuota o un singleton)
contenente le classi di base nell'ordine delle loro occorrenze nella
lista della classe di base; __doc__ è la stringa di
documentazione della classe o None
se non è definita.
L'assegnamento e la rimozione di attributi aggiornano il dizionario dell'istanza e mai il dizionario della classe. Se la classe possiede un metodo __setattr__() o __delattr__(), viene invocato questo metodo invece di aggiornare direttamente il dizionario dell'istanza.
Istanze di classe possono pretendere di essere numeri, sequenze o mappe se hanno metodi con certi nomi speciali. Vedere la sezione 3.3, ``Nomi di metodi speciali''.
Attributi speciali: __dict__ è il dizionario degli attributi; __class__ è l'istanza della classe.
sys.stdin
,
sys.stdout
e
sys.stderr
vengono inizializzati da oggetti
file corrispondenti ai flussi input, output ed error dell'interprete
standard. Si veda la
Libreria Python di riferimento per la
documentazione completa di oggetti file.
Attributi speciali di sola lettura: co_name fornisce il nome della funzione; co_argcount indica il numero degli argomenti posizionali (inclusi gli argomenti con valori predefiniti); co_nlocals indica il numero delle variabili locali usate per la funzione (inclusi gli argomenti); co_varnames è una tupla contenente i nomi delle variabili locali (partendo con i nomi degli argomenti); co_cellvars è una tupla contenente i nomi delle variabili locali che vengono referenziate da funzioni annidate; co_freevars è una tupla contenente i nomi delle variabili libere; co_code è una stringa che rappresenta la sequenza di istruzioni bytecode; co_consts è una tupla contenente le costanti usate dal bytecode; co_names è una tupla contentente i nomi usati dal bytecode; co_filename è il nome del file da cui è stato compilato il codice; co_firstlineno indica il numero della prima riga della funzione; co_lnotab è una stringa che codifica la mappatura degli offset del bytecode in numeri di riga (per dettagli vedere il codice sorgente dell'interprete); co_stacksize è la dimenszione richiesta dello stack (variabili locali incluse); co_flags è un intero che codifica un numero di flag per l'interprete.
I seguenti bit flag vengono definiti per co_flags: il bit
0x04
viene impostato se la funzione usa la sintassi
"*argomenti" per accettare un numero arbitrario di argomenti
posizionali; il bit 0x08
viene impostato se la funzione usa la
sintassi "**keywords" per accettare parole chiavi arbitrarie; il
bit 0x20
viene impostato se la funzione è un generatore.
Anche le dichiarazioni di caratteristiche future
("from __future__ import division") usano bit in
co_flags per indicare se un codice oggetto è stato compilato
con una particolare caratteristica abilitata: il bit 0x2000
viene impostato se la funzione è stata compilata con la funzionalità
division di future abilitata; i bit 0x10
e 0x1000
sono
stati usati in precedenti versioni di Python.
Altri bit in co_flags vengono riservati per un uso interno.
Se un codice oggetto rappresenta un
funzione, la prima voce in co_consts è la stringa di
documentazione della funzione o None
se non è definita.
Attributi speciali di sola lettura: f_back punta al
precedente frame dello stack (riguardo al chiamante), o None
se questo è l'ultimo frame dello stack; f_code è il codice
oggetto eseguito in questo frame; f_locals è il dizionario
usato per cercare le variabili locali; f_globals viene usato
per variabili globali; f_builtins viene usato per nomi
(reali) built-in; f_restricted è un'opzione che indica se la
funzione viene eseguita con talune restrizioni (restricted execution
mode); f_lasti fornisce l'istruzione precisa (questo è un
indice nella striga bytecode del codice oggetto).
Attributi speciali modificabili: f_trace, se non è
None
, è una funzione invocabile all'avvio di ogni riga di
codice sorgente (usata dal debugger); f_exc_type,
f_exc_value, f_exc_traceback rappresentano le
eccezioni più recenti sollevate in questo frame; f_lineno è
il numero di riga corrente del frame -- se lo si scrive
all'interno di una funzione trace si salta alla data riga (solo per
gli ultimi frame). Un debugger può implementare un comando Jump
(anche conosciuto come Set Next Statement) scrivendo in
f_lineno.
try
.''). È accessibile come sys.exc_traceback
ed anche
come il terzo elemento della tupla restituita da
sys.exc_info()
. Quest'ultima è l'interfaccia preferita dato
che funziona correttamente quando il programma sta usando thread
multipli. Quando il programma non contiene gestori disponibili, la
traccia dello stack viene scritta (formattata con precisione) sullo
standard error; se l'interprete è interattivo viene comunque resa
disponibile all'utente come sys.last_traceback
.
Attributi speciali in sola lettura: tb_next è il prossimo
livello nella traccia dello stack (riguardo al frame dove si è
verificata l'eccezione), o None
se non esiste un ulteriore
livello; tb_frame punta al frame in esecuzione del livello
corrente; tb_lineno fornisce il numero di riga dove è stata
sollevata l'eccezione; tb_lasti indica precisamente
l'istruzione. Il numero di riga e l'ultima istruzione del traceback
possono differire dal numero di riga del proprio oggetto frame se
l'eccezione viene sollevata in un'istruzione try con una
clausola except non raggiunta o con una clausola finally.
a[i:j:step]
, a[i:j, k:l]
o a[..., i:j]
.
Vengono anche create dalla funzione built-in
slice().
Attributi speciali in sola lettura: start è il legame più
basso; stop è il legame più alto; step è il valore
del passo; ciascuno di questi valori viene considerato None
se
omesso. Questi attributi possono essere di qualsiasi tipo.
Gli oggetti fetta supportano un metodo:
self, length) |
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.