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 | |
---|---|
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 | |
---|---|
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.
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 | |
---|---|
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:
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:
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:
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.