Saltar a contenido

Convertir una subrutina en función

Hasta acá, habrás notado que la subrutina hola() solo tiene el llamado efecto secundario (side effect en inglés). Solo imprime algo en la pantalla.

Pero, ¿qué ocurriría quisiera que la subrutina no tenga un efecto secundario per se, si no que en realidad devuelva un resultado?

Python
1
2
3
4
5
6
7
8
9
# Definiciones de funciones de usuario
def hola(nombre="Mundo"):
    print(f"Hola, {nombre}!")


# Código principal
hola()
nombre = input("¿Cuál es tu nombre? ")
hola(nombre)

Desde el punto de vista de la optimización de código, es preferible que las funciones reciban argumentos y retornen valores, en lugar de depender de variables globales. Esto hace que el código sea más modular, más fácil de entender y de depurar, y más fácil de reutilizar en otros programas.

Si pensamos que la función input() devuelve la cadena de caracteres que el usuario escriba, que la función int() devuelve un dato convertido a entero, o que la función round() devuelve un valor redondeado, también podemos intuir que nuestras funciones podrían devolver un resultado.

La palabra clave return

Para que una función devuelva un valor, se utiliza la palabra clave return seguida del valor que se desea retornar.

Así que para convertir nuestra subrutina hola() en una función, simplemente debemos modificarla para que retorne el saludo como valor en lugar de imprimirlo.

Además, aprovecharemos para mejorar la lógica de la función, permitiendo que reciba un argumento que será el nombre de la persona a la que se le dirige el saludo:

Python
1
2
3
4
5
6
7
# Definiciones de funciones de usuario
def formatear_saludo(nombre="Mundo"):
    return f"Hola, {nombre}!"

# Código principal
nombre = input("¿Cuál es tu nombre? ")
print(formatear_saludo(nombre))

En este caso, la función formatear_saludo() recibe como argumento el valor almacenado en la variable nombre y retorna una cadena de caracteres que incluye el saludo concatenado al nombre pasado como argumento.

Terminal (Entrada/Salida)
¿Cuál es tu nombre? Pablo
Hola, Pablo!

Y así, hemos convertido nuestra subrutina hola() en una función formatear_saludo() que recibe un argumento y retorna un valor como resultado de su ejecución, un saludo personalizado con el nombre de la persona a la que se dirige el saludo.

¡Para recordar!

Al convertir una subrutina en una función, es importante tener en cuenta que la función debe retornar un valor como resultado de su ejecución, mientras que una subrutina no retorna nada.

Veamos otro ejemplo. Supongamos que queremos calcular el cuadrado de un número.

Python
1
2
3
4
5
6
7
# Función principal
def main():
    numero = int(input("Ingrese un número: "))
    print(f"El cuadrado de {numero} es {square(numero)}")

# Ejecución de la función principal
main()

Así como tenemos las funciones int(), float(), round(), etc. tamibién podríamos pensar que existe una función predefinida en Python que calcule el cuadrado de un número:

Terminal (Entrada/Salida)
Ingrese un número: 5 
Traceback (most recent call last):
  File "c:\Users\usuario\calculadora_potenciadora.py", line 7, in <module>
    main()
  File "c:\Users\usuario\calculadora_potenciadora.py", line 4, in main
    print(f"El cuadrado de {numero} es {square(numero)}")
                                        ^^^^^^
NameError: name 'square' is not defined

Pero no la hay. Así que recibimos un error de nombre (NameError en inglés) que nos indica que square() no está definida.

¿Qué podemos hacer? Podemos definir nuestra propia función que calcule el cuadrado de un número, y luego invocarla en nuestro programa principal.

Vamos a aprovechar para modificar el nombre de nuestra función por uno que esté en nuestro idioma y sea representativo de la tarea que realiza:

Python
# Función principal
def main():
    numero = int(input("Ingrese un número: "))
    print(f"El cuadrado de {numero} es {calcular_cuadrado(numero)}")

# Función para calcular el cuadrado de un número
def calcular_cuadrado(numero):
    return numero ** 2 # También se puede usar pow(numero, 2) o simplemente numero * numero

# Ejecución de la función principal
main()

La función que acabamos de definir, calcular_cuadrado(), recibirá un número y lo almacenará en el parámetro numero. Y luego utilizará el parámetro para calcular el cuadrado del valor almacenado en el y retornarlo al punto desde donde fuera llamada la función.

Si ejecutamos nuestro programa ahora, obtendremos la siguiente salida:

Terminal (Entrada/Salida)
Ingrese un número: 5
El cuadrado de 5 es 25

En este caso, la función calcular_cuadrado() recibe un argumento numero y retorna el cuadrado de ese número como resultado de su ejecución. Así es como ahora tenemos nuestra propia función que calcula el cuadrado de un número, que podemos invocar en cualquier parte de nuestro programa para realizar esa tarea específica las veces que sea necesario.