A Byte of Python

Tuple

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

Usare le tuple

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]
				
				

Output

				
$ 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
				
				

Funzionamento

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.

Note per programmatori Perl

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!

Tuple e il comando print

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
				
				

Output

				
$ python print_tuple.py
Swaroop is 22 years old
Why is Swaroop playing with that python?
				
				

Funzionamento

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.