Veremos qué son las funciones en Python, las diferentes formas de pasar y recibir argumentos, y cómo devolver múltiples valores en una función.
Éste artículo está explicado en video. Puedes verlo aquí:https://youtu.be/8YQhPHAmvxk
Si estás aprendiendo a programar has podido comprobar que un programa puede hacerse muy grande a medida que realiza más operaciones. Pues bien, un programa muy grande puede ser dividido en bloques
más pequeños y manejables. A éstos bloques se les llama funciones.
Ahora bien, dividir un programa en funciones no es simplemente juntar unas lineas y separar otras. Una función tiene una estructura que seguir:
Una función contiene:
Para que una función trabaje, debe ser invocada. (Eslava, 2012)
Para crear una función se utiliza la palabra def, seguida del nombre de la función y entre paréntesis se anotan los parámetros que la función necesita para trabajar.
def ejemplo(): print ("Esto es una funcion sin argumentos") ejemplo()
Una vez creada, puede ser invocada en cualquier momento, utilizando su nombre y pasando los argumentos (valores) necesarios.
En el ejemplo anterior, la función no requiere de argumentos.
En el caso de que una función tenga parámetros, una forma de utilizarlos es considerando su posición.
def suma(a,b): resultado = a+b return resultado print(suma(5,6))
En el ejemplo anterior, la función suma requiere dos parámetros (a, b). Cuando es llamada, print (suma(5,6)), los argumentos leídos en el orden en que son pasados. En el ejemplo anterior a tomará el valor de 5, y b el valor de 6.
En Python no es necesario escribir los argumentos en el orden en que la función define sus parámetros. Podemos especificar el nombre del parámetro y de esa manera escribir los argumentos en cualquier orden.
def restar (actual, nacimiento): resultado = actual - nacimiento return resultado edad_erronea = restar(1990,2020) edad = restar(nacimiento=1990, actual=2020) print (edad_erronea) print (edad)
En el ejemplo anterior podemos llamar la función restar pasándole como argumentos 1990 y 2020. Por default copiará el valor 1990 al parámetro actual y el valor 2020 al parámetro nacimiento. Pero podemos pasar los argumentos por nombre:
edad = restar (nacimiento =1990, actual=2020)
y poner los argumentos en cualquier orden.
En Python también podemos especificar argumentos por default, de modo que, aunque no se pase el valor correspondiente, la función la asume por default.
Por ejemplo:
def dividir (dividendo, divisor=2): resultado = dividendo/divisor return resultado cuarto = dividir(40,4) mitad = dividir(40) print (cuarto,mitad)
En la función anterior se define un parámetro por default, divisor=2. Es posible llamar a la función pasándole los dos parámetros:
cuarto = dividir(40,4)
o pasando solamente uno:
mitad = dividir(40).
En éste último caso no hay error, porque fue especificado el parámetro divisor, y lo asume por default.
Una función puede utilizar parámetros indeterminados. Python utiliza la expresión *args para indicar una serie de argumentos indeterminados.
def sumarx(*args): resultado = 0 for valor in args: resultado = resultado + valor return resultado total = sumarx(4,3,6,2,6) print (total)
En la función anterior, es posible invocar a sumarx con la cantidad de datos que nosotros queramos.
total = sumarx(4,3,6,2,6)
o bien
total = sumarx(4,3,5)
Cualquiera de las dos formas será correcta, pues la función está programada para recorrer utilizando un for todos los argumentos (valores) pasados (for valor in args).
Hasta aquí hemos visto cómo retornar (return) un valor en una función en Python, pero éste lenguaje permite devolver múltiples valores.
def cuadradoycubo (n): cuadrado = n ** 2 cubo = n ** 3 return cuadrado, cubo #return [cuadrado,cubo] print (cuadradoycubo(5)) c2, c3 = cuadradoycubo(5) print (c2) print (c3) lista = cuadradoycubo(3) print (lista)
La función anterior devuelve dos valores (return cuadrado, cubo). Entonces cuando la función sea invocada:
c2,c3 = cuadradoycubo(5)
debe de haber dos variables que reciban los datos. De lo contrario, la variable será una tupla y si la imprimimos se verá el resultado así:
(25,125)
Los paréntesis indican que es una tupla.
Si quisiéramos que los datos los reciba una lista para posteriormente procesarla como lista, entonces la función debería retornar y dato tipo lista:
return [cuadrado,cubo]
y cuando sea llamada:
lista = cuadradoycubo(3)
los datos devueltos serán elementos de una lista Python.
Si aprendes mejor en video, te dejamos éste: