Las funciones – 100 días de Python #6

Las funciones – 100 días de Python #6

Las funciones son parte importante del código. Gracias a ellas podremos construir bloques con código reutilizable. Solo tendremos que llamar a dicha función, y esta se ejecutará. Así cuantas veces la necesitemos.

Las funciones de Python

Para escribir una función, lo debes hacer con la palabra reservada "def". Le daremos un nombre, unos paréntesis y unos puntos. El código de su interior debe indentarse como con los bucles y condicionales.

Empecemos con una función muy simple de saludo.

def saludar():
    nombre = input("Introduzca su nombre, por favor\n")
    print(f"¡Muy buenas, {nombre}!")

La función ya está creada, ahora solo hace falta llamarla, si no, no se va a ejecutar nada. La llamada se hace nombrando a la función junto con unos paréntesis.

def saludar():
    nombre = input("Introduzca su nombre, por favor\n")
    print(f"¡Muy buenas, {nombre}!")

saludar()

Resultado en la consola

Introduzca su nombre, por favor
Quique
¡Muy buenas, Quique!

El uso de parámetros en las funciones

Los paréntesis de las funciones están para poner los parámetros que queramos en ellas.

Los parámetros son variables con los que podemos introducir datos en las funciones. Ahora lo verás más claro con un ejemplo.

def saludar(nombre):
    print(f"¡Muy buenas, {nombre}!")

saludar("Quique")
saludar("Gabriela")
saludar("Javier")
saludar("María")

Resultado en la consola

¡Muy buenas, Quique!
¡Muy buenas, Gabriela!
¡Muy buenas, Javier!
¡Muy buenas, María!

A cada llamada, le doy el valor que quiero a la variable.

Una función puede tener más de un parámetro:

def saludar(nombre, edad):
    print(f"¡Muy buenas, {nombre}!")
    print(f"Usted tiene {edad} años.")

saludar("Quique", 30)

Resultado en la consola

¡Muy buenas, Quique!
Usted tiene 30 años.

Los parámetros son obligatorios. Si hay dos, en la llamada le tienes que dar dos datos. Si no, ocurre esto:

def saludar(nombre, edad):
    print(f"¡Muy buenas, {nombre}!")
    print(f"Usted tiene {edad} años.")

saludar("Quique")

Error en la consola

File "d:\tests\python\100\day6.py", line 5, in
saludar("Quique")
TypeError: saludar() missing 1 required positional argument: 'edad'

Nos da un TypeError en el que dice que falta un argumento posicional requerido, "edad".

También hay que decir, que el orden de los argumentos debe ser igual que el orden de los parámetros. En el caso de la función, primero hay que poner el nombre y después el número, si no, no tendrá sentido la salida que nos devuelva.

def saludar(nombre, edad):
    print(f"¡Muy buenas, {nombre}!")
    print(f"Usted tiene {edad} años.")

saludar(30, "Quique")

Resultado en la consola

¡Muy buenas, 30!
Usted tiene Quique años.

Diferencia entre parámetro y argumento

Hay que tener clara la diferencia entre parámetro y argumento.

Los parámetros son las variables que ponemos en los paréntesis de la declaración de la función. Los datos que les pasamos a esos parámetros en las llamadas, son los argumentos.

Puedes visualizarlo como si fuese una variable normal:

# nombre es el parámetro. "Quique" es el argumento.
nombre = "Quique"

Los argumentos de clave

Hasta ahora, hemos visto los argumentos posicionales, los cuales, son los más habituales. Sin embargo, se pueden utilizar otro tipo de argumentos llamados clave.

def saludar(nombre, edad):
    print(f"¡Muy buenas, {nombre}!")
    print(f"Usted tiene {edad} años.")

saludar(nombre="Quique", edad=30)

Resultado en la consola

¡Muy buenas, Quique!
Usted tiene 30 años.

Con este tipo de argumentos, especificamos el parámetro y el argumento en la llamada. ¿Qué diferencia tiene esto? En este ejemplo, no cambia nada del anterior, sin embargo, al especificar a qué parámetro corresponde cada argumento, los podemos colocar en el orden que queramos.

def saludar(nombre, edad):
    print(f"¡Muy buenas, {nombre}!")
    print(f"Usted tiene {edad} años.")

saludar(edad=30, nombre="Quique")

Resultado en la consola

¡Muy buenas, Quique!
Usted tiene 30 años.

Return en funciones Python

Llegamos a un tema importante que puede ser algo difícil de entender al principio. Sin embargo, es realmente de lo más fácil.

Hasta ahora, hemos estado imprimiendo los resultados de las funciones para verlos en la consola. ¿Y si necesitamos utilizar esos datos en el programa?

En ese caso, utilizaremos return, que lo que hace, es devolver el resultado al propio programa para poder utilizarlo. En consola no verás nada.

Aquí tienes un ejemplo de una función de suma que imprime con un print() el resultado.

def suma(numero1,numero2):
    print(numero1 + numero2)

suma(10,50)

Resultado en la consola

60

Sin embargo, ¿cómo vamos a almacenar el valor del resultado para utilizarlo cuando queramos dentro del programa? La respuesta, return.

Podríamos pensar que la solución es esta (sin utilizar return). Almacenar dentro de la función el resultado, para utilizarlo cuando queramos. Sin embargo, tenemos algo llamado "scope" o alcance en español, que explicaré muy pronto. Básicamente, es que no se pueden utilizar variables de dentro de una función, fuera de ellas.

def suma(numero1,numero2):
    resultado = numero1 + numero2

suma(10,50)

print(resultado)

Error en la consola

File "d:\tests\python\tests\day6.py", line 6, in
print(resultado)
NameError: name 'resultado' is not defined

El error dice que la variable no está definida (no existe), pese a que si existe. Esto lo explicaré, no te preocupes todavía.

Ahora, probemos de utilizar return para sacar el resultado fuera de la función y guardarlo en una variable.

def suma(numero1,numero2):
    return numero1 + numero2

resultado1 = suma(10,50)
resultado2 = suma(67,45)

suma_sumas = resultado1 + resultado2

print(f"Los resultados de las sumas son: {resultado1} y {resultado2}. La suma de estas sumas es igual a {suma_sumas}.")

Resultado en la consola

Los resultados de las sumas son: 60 y 112. La suma de estas sumas es igual a 172.

¿Ves? Ahora ya no tenemos problemas para manejar los resultados.

Y si lo que quieres es mostrar directamente valores en la consola, pues utiliza print() como hasta ahora.

Aquí tienes ejercicios resueltos y proyectos por si quieres practicar lo aprendido.

2 comentarios en «0»

  1. Buenas tardes profesor, excelente su curso de Python y muy buena pedagogía.
    El Link de los Ejercicios Resueltos y Proyectos del día 006, realmente lleva es a la clase del día 007 (Diccionarios). El Link no conduce a los ejercicios y proyectos correspondientes ala dia 006.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

curso de Python Entrada anterior Soluciones de ejercicios y proyecto – 100 días de Python #5
curso de Python Entrada siguiente Ejercicios y proyecto con funciones – 100 días de Python #6