Tuplas de um único elemento
Aviso: Este post foi traduzido para o português usando um modelo de tradução automática. Por favor, me avise se encontrar algum erro.
Se em Python queremos criar uma lista de um único elemento simplesmente escrevemos o elemento entre colchetes, por exemplo:
list = [1]type(list)
list
No entanto, com as tuplas não podemos escrever um elemento entre parênteses
tupla = (1)type(tupla)
int
Como vemos, Python o interpreta como um inteiro, não como uma tupla. Para resolver isso, adiciona-se uma vírgula após o elemento, por exemplo:
tupla = (1,)type(tupla)
tuple
E para que isso serve? Quando temos uma função que devolve vários parâmetros, na verdade o que está devolvendo é uma tupla. Então pode acontecer de termos um código que chama uma função, verifica o comprimento da tupla que ela devolve e processa cada elemento da tupla. Vamos ver um exemplo
def return_tuple():return 1, 2, 3def process_tuple():tuple = return_tuple()for i in tuple:print(i)process_tuple()
123
Mas o que acontece neste exemplo se a função não devolver uma tupla? Obteremos um erro
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
Obtemos um erro porque Python tenta iterar através do que a função retorna, mas como retorna um inteiro, não pode iterar através dele. Temos duas maneiras de resolver isso, uma é que a função que processa verifique se uma tupla foi retornada e, nesse caso, a processe, outra é que a função que retorna valores sempre retorne uma tupla, mesmo que seja de um único elemento.
def return_int():return 1,def process_tuple():tuple = return_int()for i in tuple:print(i)process_tuple()
1
Como vemos, na função return_int
foi colocada uma ,
no final do return
, então está devolvendo uma tupla de um único elemento, por isso a função process_tuple
não dará erro.