Módulo 13 - Funções
Mostrar ou retornar: print não é return
9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Distinguir mostrar na tela (print) de devolver valor (return).
- Reconhecer o erro clássico: guardar o retorno de uma função que só imprime.
- Diagnosticar o None inesperado que aparece no meio do programa.
- Aplicar a regra prática: calcule com return, mostre com print no final.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Mostrar ou retornar: print não é return.
Os objetivos desta aula. Distinguir mostrar na tela (print) de devolver valor (return). Reconhecer o erro clássico: guardar o retorno de uma função que só imprime. Diagnosticar o None inesperado que aparece no meio do programa. Aplicar a regra prática: calcule com return, mostre com print no final.
Veja o essencial, parte por parte.
Dois canais diferentes: os olhos e o código. print manda o valor para a TELA, para um humano ler. O programa não consegue reaproveitar o que foi mostrado.
O erro clássico, em câmera lenta. Veja o erro acontecendo de verdade.
A regra prática que resolve 90% dos casos. Fica então a regra de bolso deste curso, que vale para a prática do módulo e para o projeto final: calcule com return, mostre com print no final.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
Dois canais diferentes: os olhos e o código
Se este módulo tivesse uma aula para tatuar, seria esta. A confusão entre print e return é, com folga, o bug mais comum em código de quem está aprendendo funções, e ela nasce de uma ilusão compreensível: nos dois casos, o número aparece na tela, então parece que a função funcionou igual. Mas os canais são outros. O print joga o valor para fora do programa, na tela, onde só os seus olhos alcançam. O return mantém o valor dentro do programa, disponível para a próxima linha de código. Tela não é memória: o que foi impresso não volta.
print (mostra e pronto)
- Escreve o valor na tela para uma pessoa ler
- O programa não tem acesso ao que foi mostrado
- A chamada da função vale None
- Guardar em variável guarda None
- Serve para exibir o resultado final ao usuário
return (entrega o valor)
- Devolve o valor para o ponto da chamada
- O valor segue vivo dentro do programa
- A chamada da função vale o resultado
- Guardar em variável guarda o resultado de verdade
- Serve para cálculos que outras partes do código usam
Uma imagem ajuda a fixar: o print é o professor que resolve a conta na lousa; todo mundo vê o resultado, mas ninguém leva a lousa para casa. O return é o professor que entrega a resposta escrita na sua mão: agora ela é sua, e você faz o que quiser com ela. Quando o seu programa precisa USAR o resultado, e quase sempre precisa, só o return serve.
O erro clássico, em câmera lenta
Veja o erro acontecendo de verdade. A função dobro abaixo calcula certo, mas comete o pecado: imprime em vez de retornar. Quem escreveu quer usar o resultado numa conta depois, e é aí que o castelo cai.
def dobro(numero):
print(numero * 2)
resultado = dobro(5)
print(resultado + 1)
# 10
# TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'O 10 apareceu, o que engana. Mas resultado guardou None, e None + 1 quebra o programa.
Reconstrua a cena: a chamada dobro(5) executou a função, o print interno mostrou 10 na tela e a função terminou sem return, devolvendo None. A variável resultado guardou esse None. Na linha seguinte, o programa tenta somar None + 1, e o Python interrompe com um TypeError citando NoneType. O detalhe cruel é que o 10 na tela dá a sensação de que tudo funcionou; o defeito só explode uma linha depois, longe da causa. Sempre que um NoneType surgir numa mensagem de erro sua, a primeira suspeita é esta: alguma função no caminho imprime em vez de retornar.
def dobro(numero):
return numero * 2
resultado = dobro(5)
print(resultado + 1)
print(dobro(4) + dobro(3))
# 11
# 14Com return, o valor volta vivo: dá para somar, combinar e encadear chamadas.
A correção é uma palavra: trocar print por return dentro da função. Agora resultado guarda 10 de verdade, a soma funciona e, de bônus, a última linha mostra o que só o return permite: usar duas chamadas dentro de uma expressão, dobro(4) + dobro(3). Tente fazer isso com a versão que só imprime e você colhe None + None.
A regra prática que resolve 90% dos casos
Fica então a regra de bolso deste curso, que vale para a prática do módulo e para o projeto final: calcule com return, mostre com print no final. As funções que fazem contas e tomam decisões devolvem valores com return e não imprimem nada; o programa principal recebe esses valores, e só ele decide o que mostrar ao usuário, com print, na hora de encerrar. Essa separação entre calcular e exibir deixa as funções reaproveitáveis: a mesma calcular_media serve num programa de terminal hoje e serviria num site amanhã, porque ela não está presa a nenhuma tela.
- Função de cálculo ou decisão: usa return, não usa print.
- Programa principal: chama as funções, guarda os retornos e mostra com print no final.
- Função cujo único trabalho é exibir algo, como imprimir_cabecalho: aí sim o print mora dentro dela.
- Viu None inesperado? Procure a função que imprime em vez de retornar.
Note que a regra tem a exceção honesta do terceiro item: funções de exibição existem e são legítimas, como a imprimir_cabecalho da aula 1. A diferença é intenção. Se o trabalho da função é produzir um valor, return. Se o trabalho é mostrar algo formatado, print. O que não pode é a função híbrida confusa, que calcula e imprime e não devolve, porque ela prende o resultado na tela. Na prática da última aula, você vai escrever três funções de cálculo puras e um programa principal que imprime: a regra aplicada de ponta a ponta.
Teste rápido
A função dobro(n) só executa print(n * 2), sem return. O que acontece com x = dobro(5) e depois print(x + 1)?
Perguntas frequentes
- Se print e return confundem tanto, por que os dois existem?
- Porque fazem trabalhos diferentes e necessários. O print é a ponte com o humano: sem ele, o usuário não vê nada. O return é a ponte entre as partes do programa: sem ele, as funções não cooperam. Um programa completo usa os dois, cada um no seu posto: return nas funções de cálculo, print na hora de exibir.
- Uma função pode usar print e return ao mesmo tempo?
- Pode, e às vezes é útil, como imprimir um aviso e ainda devolver o valor. Mas em código de iniciante essa mistura costuma ser sintoma de confusão, não de intenção. Enquanto o hábito não firma, prefira funções puras de cálculo (só return) e deixe os prints no programa principal.
- Por que o erro do None aparece longe da linha errada?
- Porque guardar None numa variável não é erro para o Python; usar o None numa conta é. Então a atribuição passa limpa e a explosão acontece linhas depois, onde a variável entra numa operação. Ao ver TypeError com NoneType, siga a variável para trás até achar a função que imprime em vez de retornar.
- Como testo rápido se uma função retorna ou só imprime?
- Embrulhe a chamada num print: print(minha_funcao(2)). Se aparecer o resultado e nada mais, ela retorna. Se aparecer o resultado numa linha e None na seguinte, ela imprime por dentro e devolve nada. Dez segundos de teste no Playground e a dúvida morre.
- O print devolve alguma coisa?
- Devolve None, sempre. O trabalho do print é escrever na tela, e a devolução dele é vazia por definição. É por isso que x = print('oi') deixa x valendo None: comportamento correto, ainda que surpreenda na primeira vez.
- Essa separação entre calcular e mostrar importa fora do curso?
- Importa, e muito. Separar o cálculo da exibição é um princípio de organização usado em software profissional: a mesma função de cálculo serve para terminal, site, aplicativo e teste automatizado, porque não depende de nenhuma tela. Você está aprendendo, em pequena escala, um hábito que escala junto com os seus programas.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.