Tuplas de un solo elemento
Si en Python queremos crear una lista de un solo elemento simplemente escribimos el elemento entre corchetes, por ejemplo:
list = [1]type(list)
list
Sin embargo, con las tuplas no podemos escribir un elemento entre paréntesis
tupla = (1)type(tupla)
int
Como vemos, Python lo interpreta como un entero, no como una tupla. Para solucionar esto, se añade una coma después del elemento, por ejemplo:
tupla = (1,)type(tupla)
tuple
¿Y esto para qué sirve? Cuando tenemos una función que devuelve varios parámetros, en realidad lo que está devolviendo es una tupla. Así que se puede dar el caso en el que tengamos un código que llama a una función, compruebe la longitud de la tupla que devuelve y procese cada elemento de la tupla. Veamos un ejemplo
def return_tuple():return 1, 2, 3def process_tuple():tuple = return_tuple()for i in tuple:print(i)process_tuple()
123
Pero, ¿qué pasa en este ejemplo si la función no devuelve una tupla? Obtendríamos un error
def return_int():return 1def process_tuple():tuple = return_int()for i in tuple:print(i)process_tuple()
---------------------------------------------------------------------------TypeError Traceback (most recent call last)Cell In[5], line 96 for i in tuple:7 print(i)----> 9 process_tuple()Cell In[5], line 6, in process_tuple()4 def process_tuple():5 tuple = return_int()----> 6 for i in tuple:7 print(i)TypeError: 'int' object is not iterable
Obtenemos un error porque Python intenta iterar a través de lo que devuelve la función, pero como devuelve un entero no puede iterar a través de él. Tenemos dos maneras de solucionar esto, una es que la función que procesa compruebe si se ha devuelto una tupla y en ese caso la procese, otra es que la función que devuelve valores, siempre devuelva una tupla, aunque sea de un solo elemento
def return_int():return 1,def process_tuple():tuple = return_int()for i in tuple:print(i)process_tuple()
1
Como vemos, en la función return_int
se ha puesto una ,
al final del return
, así que está devolviendo una tupla de un solo elemento, por lo que la función process_tuple
no dará error.