Le tuple sono essenzialmente delle liste immutabili, e quindi, come per le stringhe, non è concesso di moficarne il contenuto. Le tuple sono definite separando gli elementi da virgole all'interno di una coppia di parentesi. Sono tipicamente usate in quei casi in cui un'istruzione o una funzione utente deve accedere a dati permanenti (es. coordinate x,y, record di un database, ecc...)
Esempio 9.2. Usare le tuple
#!/usr/bin/python # Filename: using_tuple.py zoo = ('wolf', 'elephant', 'penguin') print 'Number of animals in the zoo is', len(zoo) new_zoo = ('monkey', 'dolphin', zoo) print 'Number of animals in the new zoo is', len(new_zoo) print 'All animals in new zoo are', new_zoo print 'Animals brought from old zoo are', new_zoo[2] print 'Last animal brought from old zoo is', new_zoo[2][2]
$ python using_tuple.py
Number of animals in the zoo is 3
Number of animals in the new zoo is 3
All animals in new zoo are ('monkey', 'dolphin', ('wolf', 'elephant', 'penguin'))
Animals brought from old zoo are ('wolf', 'elephant', 'penguin')
Last animal brought from old zoo is penguin
La variabile zoo si riferisce ad una tupla di
elementi (valori). La funzione len può
essere usata per determinare la lunghezza della tupla, ad indicare
che la tupla è anche una sequenza.
Supponiamo di dover spostare questi animali in nuovo zoo,
perché il vecchio deve essere chiuso. Ovviamente la
tupla new_zoo contiene già alcuni
animali con i quali i nuovi arrivati dovranno convivere.
Una tupla all'interno di una tupla non perde certo la propria
identità (tuple annidate).
Per accedere ai singoli valori di una tupla dobbiamo specificarne
la posizione mediante una coppia di parentesi quadre, proprio come
dovremmo fare per le liste. Questo accesso è detto
operazione di indicizzazione. Per selezionare
il terzo valore della tupla new_zoo dobbiamo
specificare new_zoo[2], mentre per accedere al
terzo valore del terzo elemento della stessa tupla useremo
new_zoo[2][2]. Non è troppo difficile
da capire; basta prendere un po' di confidenza con la sintassi.
Tuple con nessuno o un solo elemento.
Una tupla vuota è costituita da una coppia di
parentesi vuote del tipo myempty = ().
Una tupla con un singolo valore non è altrettanto
semplice. Occorre specificarla usando una virgola che segue
il primo (ed unico) valore; in questo modo Python può
fare una distinzione tra una tupla e una coppia di
parentesi intorno ad un oggetto presente in un'espressione.
Ad esempio, una valida specificazione potrebbe essere
singleton = (2 , ), ad indicare una tupla
contenente il solo elemento 2.
Una lista annidata non perde la propria identità proprio come accade in Perl. Stesso discorso per tuple di tuple, liste di tuple o tuple di liste, ecc... Per Python sono semplicemente oggetti di ... oggetti!
Uno degli usi più comuni delle tuple è quello associtato all'istruzione print. Ad esempio:
Esempio 9.3. Output usando le tuple
#!/usr/bin/python # Filename: print_tuple.py age = 22 name = 'Swaroop' print '%s is %d years old' % (name, age) print 'Why is %s playing with that python?' % name
L'istruzione print è in grado di interpretare
una stringa quando si specifica il simbolo % seguito
da una tupla di valori che soddisfano la specifica. Le specifiche sono
usate per formattare l'output a seconda delle necessità. Le
specifiche devono essere %s per le stringhe e
%d per gli interi. Le stesse regole valgono per le
tuple.
Si noti che nel primo caso si usa %s in corrispondenza
della variabile name, ovvero del primo valore nella
tupla, mentre nel secondo caso si usa la specifica %d in
corrispondenza di age, ovvero del secondo valore
della tupla.
Python converte ogni valore della tupla in una stringa e sostituisce
la stringa in luogo della specifica. Quindi %s è
sostituito dal valore della variabile name e così
via.
Questo uso dell'istruzione print consente di
ottenere delle stampe in modo semplice ed evita la noiosa
manipolazione delle stringhe che sarebbe altrimenti necessaria.
Inoltre non richiede l'uso di virgole separatorie.
Di solito è sufficiente usare la specifica %s
e lasciar fare al Python tutto il resto del lavoro. Questa sarebbe valida
anche per il trattamento dei dati numerici, ma di solito è preferibile
scegliere la corretta specifica (%d) in modo da aggiungere un ulteriore
livello di controllo al programma.
Nella seconda istruzione print si usa una singola
specifica seguita dal simbolo % a sua volta seguito
da un singolo valore; non è presente la coppia di parentesi.
Questa scrittura è valida solo nel caso in cui c'è una
singola specifica nella stringa.