A Byte of Python

Tuples

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.

Ús de les tuples

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]
				
				

Sortida

				
$ 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
				
				

Com funciona

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.

Nota pels programadors de Perl

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.

Tuples i la instrucció print

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
				
				

Sortida

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

Com funciona

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.