Pular para o conteúdo

Como usar o valor de retorno em Python?

[

O comando return em Python: Uso e melhores práticas

O comando return em Python é um componente fundamental das funções e métodos. Você pode usar o comando return para fazer com que suas funções retornem objetos Python para o código chamador. Esses objetos são conhecidos como o valor de retorno da função e podem ser usados para realizar outras operações em seus programas.

Usar o comando return de forma eficaz é uma habilidade essencial se você deseja programar funções personalizadas em Python que sejam Pythonicas e robustas.

Neste tutorial, você aprenderá:

  • Como usar o comando return em suas funções Python;
  • Como retornar valores únicos ou múltiplos de suas funções;
  • Quais são as melhores práticas a serem observadas ao usar comandos return.

Iniciando com Funções Python

A maioria das linguagens de programação permite que você atribua um nome a um bloco de código que realiza uma determinada computação. Esses blocos de código com nome podem ser reutilizados facilmente, já que você pode usar seus nomes para chamá-los de diferentes lugares em seu código.

Os programadores costumam chamar esses blocos de código com nome de sub-rotinas, rotinas, procedimentos ou funções, dependendo da linguagem de programação que estão utilizando.

As funções em Python são definidas usando a palavra-chave def, seguida do nome da função e parênteses que podem conter um ou mais parâmetros. Ao criar uma função, você pode especificar o que ela deve retornar usando a instrução return.

Aqui está um exemplo simples que demonstra como criar uma função em Python:

def saudacao(nome):
return "Olá, " + nome + "! Bem-vindo ao mundo da programação!"
mensagem = saudacao("João")
print(mensagem)

Nesse exemplo, definimos uma função chamada saudacao que recebe um parâmetro nome. A função retorna uma mensagem de boas-vindas personalizada para o nome fornecido. A variável mensagem recebe o valor retornado pela função saudacao e, em seguida, é impressa na tela.

Ao executar esse código, você verá o seguinte resultado:

Olá, João! Bem-vindo ao mundo da programação!

O Comando return em Python

O comando return é usado dentro de uma função para especificar o valor que a função deve retornar. Quando a instrução return é executada, a função é encerrada imediatamente e o valor especificado é devolvido ao código chamador.

Existem duas maneiras principais de usar o comando return em Python: explicitamente e implicitamente.

Declarações de retorno explícitas

Uma declaração de retorno explícita é usada quando você deseja retornar um valor específico da função.

Aqui está um exemplo que mostra como usar a instrução return explicitamente em uma função:

def calcular_quadrado(numero):
return numero ** 2
resultado = calcular_quadrado(5)
print(resultado)

Nesse exemplo, a função calcular_quadrado recebe um número como parâmetro e retorna o quadrado desse número. O valor retornado pela função é atribuído à variável resultado e, em seguida, é impresso na tela.

Ao executar esse código, você verá o seguinte resultado:

25

Declarações de retorno implícitas

Uma declaração de retorno implícita é usada quando você deseja que a função retorne um valor sem especificar explicitamente o comando return.

Aqui está um exemplo que demonstra como usar a declaração de retorno implícita:

def saudacao(nome):
mensagem = "Olá, " + nome + "! Bem-vindo ao mundo da programação!"
print(mensagem)
saudacao("João")

Nesse exemplo, a função saudacao cria uma mensagem de boas-vindas com base no nome fornecido como parâmetro e, em seguida, imprime essa mensagem na tela. Observe que a função não tem um comando return. Embora a função não retorne nenhum valor explicitamente, ela executa uma ação útil: imprimir uma mensagem.

Ao executar esse código, você verá o seguinte resultado:

Olá, João! Bem-vindo ao mundo da programação!

Retornando Valores vs Impressão

É importante entender a diferença entre retornar valores de uma função e imprimir valores na tela. Quando você retorna um valor de uma função, você pode usar esse valor para realizar outras operações no seu código, atribuí-lo a uma variável, passá-lo como argumento para outra função, entre outras possibilidades.

Por outro lado, a impressão de valores na tela é apenas uma forma de exibir informações para o usuário durante a execução do programa. A impressão não produz nenhum valor utilizável para ser usado posteriormente no código.

É uma prática recomendada separar as responsabilidades de um programa de forma a deixar as funções focadas em realizar cálculos e retornar valores, enquanto a exibição de informações fica a cargo do código que chama essas funções.

Vejamos um exemplo que mostra a diferença entre retornar valores e imprimir valores:

def calcular_quadrado(numero):
return numero ** 2
def mostrar_resultado(valor):
print("O resultado é:", valor)
valor_calculado = calcular_quadrado(5)
mostrar_resultado(valor_calculado)

Nesse exemplo, temos duas funções: calcular_quadrado e mostrar_resultado. A função calcular_quadrado recebe um número como parâmetro e retorna o quadrado desse número. A função mostrar_resultado imprime uma mensagem na tela junto com um valor fornecido como argumento.

Ao executar esse código, você verá o seguinte resultado:

O resultado é: 25

Observe que a função calcular_quadrado retorna um valor que é armazenado na variável valor_calculado. Esse valor é então passado como argumento para a função mostrar_resultado, que imprime a mensagem correspondente.

Retornando Múltiplos Valores

Python permite que você retorne múltiplos valores de uma função colocando-os em uma estrutura de dados, como uma lista ou tupla, e retornando essa estrutura de dados como um todo. Isso pode ser útil quando você deseja retornar várias informações relacionadas de uma vez.

Aqui está um exemplo que mostra como retornar múltiplos valores de uma função:

def calcular_quadrado_e_cubo(numero):
quadrado = numero ** 2
cubo = numero ** 3
return quadrado, cubo
resultado_quadrado, resultado_cubo = calcular_quadrado_e_cubo(3)
print("O quadrado é:", resultado_quadrado)
print("O cubo é:", resultado_cubo)

Nesse exemplo, a função calcular_quadrado_e_cubo recebe um número como parâmetro e retorna o quadrado e o cubo desse número. Os valores retornados pela função são atribuídos às variáveis resultado_quadrado e resultado_cubo respectivamente. Em seguida, os valores são impressos na tela.

Ao executar esse código, você verá o seguinte resultado:

O quadrado é: 9
O cubo é: 27

Observe que a função calcular_quadrado_e_cubo retorna uma tupla contendo os valores do quadrado e do cubo. Ao atribuir o retorno da função a duas variáveis (resultado_quadrado, resultado_cubo), os valores individuais são extraídos da tupla e podem ser usados separadamente.

Melhores Práticas ao Usar o Comando return

Ao usar o comando return em suas funções Python, é recomendável seguir algumas melhores práticas para escrever um código mais legível, organizado e eficiente.

Aqui estão algumas melhores práticas que você pode seguir ao usar o comando return em suas funções:

Retornar None explicitamente

É uma boa prática retornar o valor None explicitamente quando uma função não precisa retornar um resultado significativo. O valor None é um objeto especial em Python que representa a ausência de valor e pode ser usado para indicar que a função foi executada com sucesso, mas não retornou nenhum resultado útil.

Por exemplo, se você tem uma função que imprime uma mensagem na tela, mas não precisa retornar nenhum valor, você pode usar o comando return None para ser explícito sobre isso:

def imprimir_mensagem(mensagem):
print(mensagem)
return None

Embora o uso do comando return None seja opcional nesse caso, ele ajuda a deixar claro que a função não retorna nenhum valor significativo.

Lembrar do Valor de Retorno

Ao chamar uma função que retorna um valor, é uma boa prática atribuir esse valor a uma variável para uso posterior. Essa abordagem torna o código mais legível e facilita a compreensão do que está sendo feito.

Por exemplo, em vez de fazer isso:

calcular_quadrado(5)

Você pode fazer isso:

resultado = calcular_quadrado(5)

Dessa forma, você pode usar o valor retornado pela função posteriormente, se necessário.

Evitar Expressões Complexas de Retorno

Quando você estiver retornando um valor de uma função, tente evitar expressões complexas de retorno que possam dificultar a leitura e a compreensão do código.

Por exemplo, em vez de fazer isso:

def calcular_media(numeros):
return sum(numeros) / len(numeros) if len(numeros) != 0 else 0

Você pode fazer isso:

def calcular_media(numeros):
if len(numeros) != 0:
return sum(numeros) / len(numeros)
else:
return 0

Embora a expressão complexa de retorno seja mais concisa, a versão mais explícita é mais legível e facilita a compreensão do que está acontecendo.

Retornar Valores vs Modificar Variáveis Globais

Ao escrever funções, é geralmente recomendado retornar valores em vez de modificar variáveis globais. Modificar variáveis globais pode levar a resultados inesperados e tornar o código mais difícil de entender e depurar.

Por exemplo, em vez de fazer isso:

resultado = 0
def calcular_quadrado(numero):
global resultado
resultado = numero ** 2
calcular_quadrado(5)
print(resultado)

Você pode fazer isso:

def calcular_quadrado(numero):
return numero ** 2
resultado = calcular_quadrado(5)
print(resultado)

Dessa forma, você evita a modificação de variáveis globais e torna o código mais estruturado e fácil de entender.

Usar return com Condicionais

Você pode usar o comando return com condicionais para interromper a execução de uma função mais cedo, se necessário.

Por exemplo, em vez de fazer isso:

def verificar_numero(numero):
if numero < 0:
print("O número deve ser positivo")
else:
return numero ** 2
resultado = verificar_numero(-5)

Você pode fazer isso:

def verificar_numero(numero):
if numero < 0:
print("O número deve ser positivo")
return None
else:
return numero ** 2
resultado = verificar_numero(-5)

Dessa forma, a função é interrompida imediatamente se a condição for satisfeita e o valor None é retornado.

Retornar True ou False

Em muitos casos, pode ser útil que uma função retorne um valor booleano (True ou False) com base em uma condição.

Por exemplo, em vez de fazer isso:

def verificar_numero_primo(numero):
divisores = 0
for i in range(1, numero + 1):
if numero % i == 0:
divisores += 1
if divisores > 2:
return False
else:
return True

Você pode fazer isso:

def verificar_numero_primo(numero):
divisores = 0
for i in range(1, numero + 1):
if numero % i == 0:
divisores += 1
return divisores <= 2

Dessa forma, a função retorna diretamente o valor booleano (True ou False) com base no resultado da condição.

Encurtar Loops com Short-Circuiting

Em alguns casos, você pode querer encurtar um loop usando o short-circuiting. O short-circuiting permite que você interrompa a execução de um loop assim que uma certa condição for satisfeita.

Por exemplo, em vez de fazer isso:

def verificar_numero(numero):
for i in range(2, numero):
if numero % i == 0:
return False
return True

Você pode fazer isso:

def verificar_numero(numero):
for i in range(2, int(numero ** 0.5) + 1):
if numero % i == 0:
return False
return True

Dessa forma, o loop é interrompido assim que um divisor é encontrado, o que reduz o tempo necessário para verificar se um número é primo.

Reconhecer Código Morto

Ao usar o comando return, é importante reconhecer e remover qualquer código morto após a instrução return. O código morto é qualquer código que é executado depois que o comando return é encontrado e, portanto, é inútil.

Por exemplo, em vez de fazer isso:

def calcular_quadrado(numero):
return numero ** 2
print("Essa linha será ignorada")
resultado = calcular_quadrado(5)
print(resultado)

Você pode fazer isso:

def calcular_quadrado(numero):
return numero ** 2
resultado = calcular_quadrado(5)
print(resultado)

Dessa forma, você remove o código morto e torna o código mais limpo e legível.

Retornar Múltiplos Objetos Nomeados

Se você precisa retornar vários objetos relacionados de uma função, pode ser útil retorná-los como uma tupla nomeada. O uso de tuplas nomeadas torna mais fácil entender o significado de cada objeto retornado.

Aqui está um exemplo que mostra como retornar uma tupla nomeada de uma função:

def calcular_quadrado_e_cubo(numero):
quadrado = numero ** 2
cubo = numero ** 3
return {"quadrado": quadrado, "cubo": cubo}
resultado = calcular_quadrado_e_cubo(3)
print("O quadrado é:", resultado["quadrado"])
print("O cubo é:", resultado["cubo"])

Nesse exemplo, a função calcular_quadrado_e_cubo retorna uma tupla nomeada contendo os valores do quadrado e do cubo. Os valores retornados pela função são armazenados em um dicionário e, em seguida, as informações individuais são impressas na tela.

Ao executar esse código, você verá o seguinte resultado:

O quadrado é: 9
O cubo é: 27

Conclusão

O comando return é uma ferramenta poderosa para criar funções Python eficientes e reutilizáveis. Usando o return de forma eficaz, você pode retornar valores únicos ou múltiplos de suas funções, tomar decisões condicionais dentro de suas funções e implementar padrões avançados, como fechamentos, decoradores e o padrão de fábrica.

Lembre-se das melhores práticas ao usar o comando return, como retornar None explicitamente, lembrar do valor de retorno, evitar expressões complexas de retorno, retornar valores em vez de modificar variáveis globais, usar o return com condicionais e encerrar loops prematuramente. Essas práticas ajudarão a tornar seu código mais legível, organizado, eficiente e Pythonico.

Com essas informações em mãos, você estará preparado para escrever funções Python mais poderosas e expressivas para seus projetos. Então, mãos à obra e divirta-se programando em Python!