miércoles, 22 de mayo de 2024

Lenguajes. Python.

Función retun()

En entradas anteriores hemos estado trabajando con los datos que puede recibir una función mediante argumentos que se asocian a los parámetros que se han definido en ella. En esta entrada trabajaremos con la devolución de valores, algo que la función realiza mediante la instrucción return().

Del mismo modo que una función no tiene por qué tener parámetros, tampoco tiene por qué devolver nada: en ese caso carece de la instrucción return(), lo que altera (en Python) su consideración de función. De hecho ya hemos trabajado con este tipo de funciones propias en anteriores ocasiones (1).

Ahora vamos a empezar a utilizar return() como recurso para devolver datos de la función secundaria (o de las funciones secundarias) a la(s) funciones principal(es), aunque es posible desarrollar sistemas complejos de interdependencia entre funciones, siguiendo los principios de la programación funcional. Pero no es este el camino que vamos a seguir en estos momentos: no lo haremos porque aun no corresponde, dado el momento en que se encuentra nuestro proceso de aprendizaje.

Lo que sí corresponde es explicar cómo implementamos return() en la función y que implicaciones tiene para la llamada a esa función desde el flujo principal del algoritmo. Para ello desarrollaremos y analizaremos en primer lugar un script sencillo. Posteriormente lo haremos algo más complejo para ver el modo en que podemos utilizar return() para devolver varios valores y no sólo uno (2).

Este primer ejemplo es en realidad una modificación y simplificación de un script anterior, pero nos sirve perfectamente para ejemplificar el uso simple de la instrucción return() y lo que implica en la función y en su llamada:

def funcion_suma (a, b):

    op = a + b

    return (op)

def main():

    print("Dame dos números:")

    a = eval(input("Primer número: "))

    b = eval(input("Segundo número: "))

    resultado = funcion_suma(a,b)

    print("El resultado de la operación es ", resultado)

main()

Cuando llamamos a funcion_suma() desde main(), empezamos por emplear una variable como recurso para recoger el resultado (return()) de dicha función. Posteriormente imprimimos ese resultado, aunque podemos imaginarnos cualquier otro proceso. En la función, a return() asignamos una variable (op), pero podríamos asignar directamente una expresión (a + b), ya que ambas opciones son posibles.

Realmente este modo de funcionar no presenta mayor dificultad, lo que dota a las funciones Python de gran sencillez de uso. Pero además son sensiblemente más potentes y flexibles, como veremos a continuación en este segundo script:

def func_opera (a, b):
    su = a + b
    re = a - b
    mu = a * b
    return (su,re,mu, a/b,a**b)

def func_imprime(suma, resta, multiplica, divide, potencia):
    print("El resultado de la suma es ", suma)
    print("El resultado de la resta es ", resta)
    print("El resultado de la multiplicación es ", multiplica)
    print("El resultado de la división es ", divide)
    print("El resultado de la potenciación es ", potencia)

def main():
    print("Dame dos números:")
    a = eval(input("Primer número: "))
    b = eval(input("Segundo número: "))
    suma, resta, multiplica, divide, potencia = funcion_suma(a,b)
    imprime_res(suma, resta, multiplica, divide, potencia)

main()

Lo primero que debemos observar es que en este caso: 

  1. Utilizamos tres funciones: una principal (main()) y dos subordinadas: func_opera() y  func_imprime()
  2. Mientras que func_opera() cuenta con la instrucción return()func_imprime() no.
  3. En func_opera()return() devuelve hasta cinco datos: los tres primeros se expresan mediante variables (previamente has sido definidas como resultados de tres operaciones) y las dos últimas mediante expresiones.
  4. En main(), la llamada a func_opera() va precedida de cinco variables: cada una de ellas recoge cada uno de los valores que devuelve (la instrucción return() de) la función func_opera(), siendo el orden de presentación de dichas variables determinante del valor que recibe.
  5. Desde main() llamamos a func_imprime() pasándole como argumentos las variables que antes definimos como receptoras de los resultados que devuelve la func_opera() según expresamos antes en 4
  6. Dada la naturaleza de func_imprime(), las misma llamada a la función (en este caso desde main()) genera el resultado esperado: se imprimen en pantalla las cinco frases que genera esa función.
Este segundo script nos ha permitido ver el uso simultáneo de los dos de los tres  tipos de función con que cuenta Python: sin parámetros ni return(), con parámetros pero sin return() y con parámetros y return(). Vimos también cómo pasar varios datos desde return() y el efecto que tiene en la llamada a la función (3).


NOTAS

(1) En otros lenguajes como OOo Basic, ya no estaríamos hablando de funciones, sino de subrutinas.(2) En otros lenguajes (OOo Basic por ejemplo, de nuevo) una función no sólo se define como tal si consta de parámetros y devuelve valores, es que además únicamente puede devolver un valor.
(3) Gracias a func_imprime() pudimos observar uno de los efectos más interesantes del uso de las funciones: la simplificación y estructuración del código.

No hay comentarios:

Publicar un comentario

Comenta esta entrada