Retorno de múltiplos valores em funções – com tuplas

Quando aprendemos o conceito de funções no estudo de programação, nos é ensinado que uma função é um trecho de código ao qual damos um nome, que realiza uma tarefa específica, e que pode receber várias entradas de uma vez e retornar apenas um valor por vez. Até aí, tudo certo. Mas, quando estamos programando em Python, poderemos nos deparar com códigos semelhantes ao seguinte:

def func(x, y):
    return x*y, x+y

mult, soma = func(2, 3)

Pera aí! Uma função que retorna 2 valores de uma só vez? O valor da multiplicação das entradas será retornado e atribuído à variável mult, e o valor da soma das entradas atribuído à variável soma. Outro exemplo:

def func(x, y):
    return x+y, x-y, x*y, x/y, x%y, "hello"

Uma função com seis valores de retorno ao mesmo tempo? Quem, num momento de desespero e extrema gambiarra, nunca pensou em definir uma struct só para agrupar dois ou três valores que desejava que fossem retornados todos de uma vez por uma única função? Pois é, em Python é possível retornar mais de um valor em uma função. Porém, nem tudo é mágica. Para entender, vamos começar por um exemplo. Abra um shell Python e crie uma variável da seguinte forma:

>>> x = 2, 4, 10

Você deve estar pensando: “Isso não vai funcionar! Como posso eu atribuir 3 valores para apenas uma variável?”. O que está esperando para testar? Viu? Funcionou. Mas como? Calma, o próximo passo é vermos o conteúdo de x após a atribuição:

>>> print x
(2, 4, 10)

Agora, vamos verificar qual é o tipo de dados da variável x:

>>> type(x)
<type 'tuple'>

Opa! Então, quer dizer que quando eu faço return x*y, x+y, estou na verdade retornando uma TUPLA? Isso mesmo. Mais legal que isso somente o fato de Python suportar a seguinte forma de atribuição de elementos de tuplas:

x = 1 , 2, 10
a, b, c = x

Após as atribuições da segunda linha, o valor de a será 1, de b será 2 e de c será 10. Legal né? É exatamente isso que acontece quando criamos uma função com “mais de um valor de retorno”. Na realidade, nossa função possui apenas um valor de retorno, que é uma tupla. E os elementos dessa tupla são atribuídos à variáveis individuais no chamador da função.

Mais sobre tuplas: http://www.franciscosouza.com.br/aprendacompy/capitulo_09.html

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s