Les tuples són com les llistes, excepte que les primeres són immutable com els strings. Per tant, les tuples no poden ser modificades. Les tuples es defineixen com les llistes, però fent servir parèntesis. Les tuples es fan servir quan es requereix que la col·lecció de valors no pugui canviar.
Example 9.2. Ús de les tuples
#!/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 variable zoo
fa referència a una tupla d'elements.
Hem vist que la funció len
ens retorna la longitud de la tupla.
Això també és indica que les tuples són també seqüències.
Ara passem els animals a un nou zoo ja que l'antic està tancat. Per tant, la tupla
new_zoo
passa a contenir els animals que hi havia a l'antic zoo (agrupats en
una tupla) més uns quants de nous. Tornant a la realitat, podem veure que una tupla dins d'una
altra no perd la seva identitat.
Podem accedir als elements de la tupla especificant la seva posició entre claudàtors (com fèiem amb les llistes) amb el que s'anomena operador d'indexació.
Accedim al tercer element de new_zoo
especificant new_zoo[2]
i accedim al tercer element d'aquest tercer element (recordem que
és una tupla) amb new_zoo[2][2]
.
Tot plegat ens resultarà molt senzill un cop estiguem còmodes amb la notació.
Tuples amb 0 o 1 elements.
Una tupla buida es construeix amb un parell de parentésis sense elements.
Considerem com a exemple myempty = ()
.
En canvi, no és tan senzill construir una tupla amb un sol element.
Cal especificar-la fent servir una coma a continuació del element, i un parell de
parèntesis envoltant l'objecte. Per exemple, definirem
singleton = (2 , )
per a obtenir una tupla que contingui únicament
l'element 2
.
Una llista dins una llista no perd la seva identitat. És a dir, les llistes no són aplanades com passa a Perl. El mateix passa amb les tuples, o amb les tuples dins de llistes, o amb llistes dins de tuples, etc. Pel que fa a Python, només són objectes emmagatzemats dins d'objectes.
Les tuples es fan servir sovint juntament amb la instrucció print. Considerem l'exemple:
Example 9.3. Sortida fent servir tuples
#!/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
La instrucció print
pot rebre una especificació en forma
de cadena seguida del símbol %
i una tupla d'elements
corresponents a l'especificació. Les especificacions es fan servir per a
donar un cert format a la sortida. Exemples d'especificacions són
%s
per a strings i %d
per a enters.
La tupla contindrà els elements corresponents a aquestes especificacions en el
mateix ordre en que apareixen al string.
Observem el primer ús: el primer literal %s
correspon al primer
element de la tupla (la variable name
). De la mateixa manera, el segon element especificat és un enter (%d
) i es correspon amb
el segon element de la tupla (age
)
El funcionament és el següent: primer es converteixen tots els elements de la tupla
en strings, i a continuació es substitueix el valor de cada string en el lloc corresponent
de l'especificació. Al primer print
de l'exemple, per tant, %s
es substitueix
pel valor de la variable name
, i %s
pel valor de age
.
L'ús de la instrucció print
simplifica molt l'escriptura, i
evita moltes manipulacions de strings per a aconseguir el mateix. També ens estalvia
les comes que havíem fet servir fins ara.
Generalment podem simplement fer servir l'especificació %s
i
deixar que Python se n'encarregui de la resta. Funciona fins i tot amb números.
En tot cas és possible que vulguem definir amb més precisió l'especificació
correcta ja que això afegeix un nivell més de comprovació de la correcció del programa.
A la segona instrucció print
fem servir una única especificació
seguida del símbol %
i completada amb un únic element. Fixem-nos que no hi ha
de parèntesi. Això només funciona quan hi ha un únic element especificat.