Lisandro
(usa Arch Linux)
Enviado em 31/12/2016 - 18:09h
Print e Return são cousas realmente muito diferentes, talvez assim fique mais claro:
Estou em uma parte qualquer de um programa e quero que seja impressa uma informação na saída padrão (geralmente o console, tela, etc), é o caso de usar print. O print está pegando algo e imprimindo para a saída padrão.
O return, como o nome diz, retorna um valor em memória, é uma resposta a um chamado anteriormente feito no programa a uma função que vai responder com o return, ou também pode ser a resposta de um "programa" ao chamado de outro "programa".
Talvez a terminologia não seja a mais adequada e correta, mas a intenção é tentar esclarecer a dúvida e não a correção conceitual. Ok?
Então vejamos:
Posso ter um programa_A.py que vai imprimir no console uma lista de números e ao lado de cada número seu quadrado.
O programa poderia ser assim:
# isto é um comentário ele não é interpretado pelo python
# aqui definimos uma lista
lista = [1,2,3,4]
# aqui no corpo principal iteramos a lista imprimindo
for numero in lista:
print('Numero: {} tem o quadrado: {}' .format(numero, numero**2))
A impressão no console seria:
Numero: 1 tem o quadrado: 1
Numero: 2 tem o quadrado: 4
Numero: 3 tem o quadrado: 9
Numero: 4 tem o quadrado: 16
Mas e se eu quisesse que esta lista fosse mutável ou que eu quisesse que ela fosse gerada em uma função do meu programa?
Bom meu programa_A.py poderia ficar assim:
# abaixo a função que gera e retorna uma lista
# ela não imprime nada, só retorna o valor para quem pediu
def funcao_lista():
return list(range(1,5))
# aqui no corpo principal iteramos a resposta
# da função lista e não mais a lista
for numero in funcao_lista():
print('Numero: {} tem o quadrado: {}' .format(numero, numero**2))
O resultado é o mesmo, mas podemos observar que o return não imprime no console, quem faz isso é o print.
Agora também poderíamos colocar a função em um programa_B.py e chamá-la no nosso programa_A.py.
Aí nosso programa_B.py seria simplesmente:
# abaixo a função que gera e retorna uma lista
# ela não imprime nada, só retorna o valor para quem pediu
def funcao_lista():
return list(range(1,5))
E o programa_A.py poderia ser:
# importamos a função dejada do outro programa
from programa_B import funcao_lista
# aqui no corpo principal iteramos a resposta
# da função lista importada
for numero in funcao_lista():
print('Numero: {} tem o quadrado: {}' .format(numero, numero**2))
Veja que o programa_B.py não imprime nada, só retorna os valores para que programa_A.py possa fazer seu trabalho e imprimir par o console.
Espero que esta mini dica te ajude a compreender as diferenças.
Abraço