Diferencia entre «print» y «return»

Diferencia entre «print» y «return»



Cuando nos introducimos en las funciones, un concepto tan central en la programación, es habitual confundir la función print() con la palabra reservada return o no tener muy en claro sus diferencias. En este pequeño artículo vamos a esclarecer estos dos conceptos y proporcionar ejemplos para disipar la dificultad.

Como acabamos de mencionar, print() es una de las funciones incorporadas del lenguaje. Como toda función, puede recibir determinados argumentos (particularmente print() acepta cualquier cantidad de argumentos) y tener un resultado. En cambio, return es una palabra reservada, que opcionalmente puede estar sucedida de una expresión o una variable. Pero lo fundamental es que cumplen objetivos totalmente distintos. print() sirve para mostrar un mensaje en la pantalla de una aplicación de consola, mientras que return se utiliza para establecer el resultado (o valor de retorno) de una función. Así, return es una operación mucho más genérica que print(), aunque solo puede usarse dentro de las funciones: no puede haber un return en cualquier otro lugar del código que no sea el interior de una función. print() solo puede usarse, naturalmente, en aplicaciones de consola, pues sirve únicamente para mostrar un mensaje en la consola (o terminal, línea de comandos, símbolo del sistema, etc.).

Veamos a algunos ejemplos en el código.

# Imprime un mensaje en pantalla.
print("Hola mundo.")

# Función que calcula el máximo entre dos números pasados
# como argumentos.
def numero_maximo(a, b):
    if a > b:
        maximo = a
    else:
        maximo = b
    return maximo

Tomemos este último ejemplo para responder a esta pregunta: ¿por qué usar return maximo y no print(maximo) al final de la función? Para responder, creemos una función similar pero con esta última modificación:

def numero_maximo_print(a, b):
    if a > b:
        maximo = a
    else:
        maximo = b
    print(maximo)  # Reemplazamos el return por un print().

Ahora tenemos dos funciones: numero_maximo(), que retorna o tiene como resultado el máximo de los dos números que indicamos como argumentos, y numero_maximo_print(), que no tiene ningún resultado (porque no hay return dentro de la función) y, en su lugar, imprime el número máximo en la pantalla.

Recordemos que las funciones tienen por objetivo evitar la repetición de código y promover la reutilización de código. Cuando ciertas porciones de código son muy habituales en un programa de Python, conviene abstraerlas en una función. Si nuestro programa frecuentemente debe calcular el máximo entre dos números (para lo cual hay una función incorporada, max()), resulta muy útil tener una función para ello.

Observemos cómo se usan estas dos funciones si quisiéramos calcular el número mayor entre 7 y 5 y mostrar el resultado en pantalla. Utilizando numero_maximo(), que ─recordemos─ tiene como resultado el número máximo, haríamos:

maximo = numero_maximo(7, 5)
print(maximo)  # Imprime 7.

O más reducido:

print(numero_maximo(7, 5))  # Imprime 7.

Usando numero_maximo_print(), sería simplemente:

numero_maximo_print(7, 5)  # Imprime 7.

Hasta aquí no hay mucha diferencia. El problema con numero_maximo_print() radica en que solo sirve para mostrar un número máximo en pantalla. ¿Siempre que calculo el máximo entre dos números quiero mostrar el resultado en pantalla? ¿Qué ocurre si queremos saber el número máximo para sumarlo a otro número? Usando la primera función, diríamos:

suma = numero_maximo(7, 5) + 10  # Guarda 17 en la variable suma.

Recordemos que el resultado de una función se «reemplaza» en el lugar donde aparece la llamada a la función. Así, en el código anterior, numero_maximo(7, 5) es reemplazado por su valor de retorno (7) y luego el resultado de la operación 7 + 10 se almacena en suma.

Pero con numero_maximo_print() no podemos hacer lo mismo, porque esa función no tiene ningún resultado:

suma = numero_maximo_print(7, 5) + 10

Este código arroja un error, pues numero_maximo_print(7, 5) es reemplazado por None (ya que no tiene ningún resultado), y una suma entre un número (10) y None es inválida.

Así, la utilización de print() dentro de una función limita demasiado su aplicabilidad, lo cual va contra el objetivo de las funciones, que es promover la reutilización de código. Mientras numero_maximo() me permite calcular el máximo entre dos números y luego decidir qué hacer con ese resultado, numero_maximo_print() únicamente sirve para mostrar el máximo en la pantalla.

Con la primera función puedo, por poner algunos más ejemplos, guardar el resultado en un archivo:

f = open("maximo.txt", "w")
f.write(str(numero_maximo(7, 5)))
f.close()

O usarlo en un condicional:

if numero_maximo(7, 5) % 2 == 0:
    print("El número máximo es par.")
else:
    print("El número máximo no es par.")

O guardarlo en una variable y usarlo para distintas cosas:

maximo = numero_maximo(7, 5)
print("El número máximo es:", maximo)
suma = maximo + 10
f = open("maximo_mas_10.txt", "w")
f.write(str(suma))
f.close()

O cualquier otra cosa que se nos ocurra que podemos hacer con un número. Nada de esto es posible con numero_maximo_print().

Hay ciertas ocasiones donde un print() puede ser pertinente dentro de una función. Pero, por lo general, lo que queremos en una función es establecer un resultado, no imprimirlo, y esto se hace vía return. Como regla general, particularmente cuando recién nos estamos introduciendo en las funciones, esforcémonos por no usar print() dentro de una función. Si una función tiene un resultado (return), siempre podremos imprimirlo luego de llamarla:

print(funcion())

Pero si la función tiene un print() en lugar de un return, no nos servirá para más que mostrar algo en la pantalla, sin la posibilidad de utilizar el valor para otra cosa alguna.



Deja una respuesta