La lección anterior agrupaba una tarea bajo un nombre. Ahora vas a convertir esa tarea en algo más útil: una función que recibe datos, trabaja con ellos y entrega un resultado.
Usa este recorrido mental durante toda la lección: entrada → trabajo → resultado.
Seguir el dato que entra por parámetros, se transforma y vuelve mediante return.
El parámetro es el nombre de una entrada
def saludar(nombre):
print(f"Hola, {nombre}")
saludar("Luna")
saludar("Pablo")nombre es el parámetro: el nombre que usa la función para referirse al dato recibido. "Luna" y "Pablo" son argumentos: los valores concretos usados en cada llamada.
No hace falta obsesionarse con los dos términos. Lo importante es entender que una misma definición puede trabajar con valores diferentes.
return entrega un valor al lugar donde se hizo la llamada
def doble(numero):
return numero * 2
resultado = doble(6)
print(resultado)La llamada doble(6) se convierte en el valor 12. Puedes guardarlo, compararlo, sumarlo o pasarlo a otra función.
Piensa en sustitución: cuando una función devuelve 12, imagina que la llamada queda sustituida por 12 en la expresión que la contiene.
Mostrar un valor y devolver un valor resuelven problemas distintos
def mostrar_doble(numero):
print(numero * 2)
def calcular_doble(numero):
return numero * 2La primera enseña el número en pantalla. La segunda lo entrega al programa. Si después necesitas hacer calcular_doble(5) + 3, necesitas un return.
¿Qué devuelve una función sin return?
Python devuelve None de forma implícita. Que una función haya impreso algo no significa que haya devuelto ese valor.
Sigue el dato hasta que vuelve a la llamada
100, 20→ parámetrosprecio, descuento→ cálculo80→ returnprecio_finalPredicción: si una función solo hace print(80) y después escribes resultado = funcion(), resultado vale None. Mostrar algo y devolverlo son acciones distintas.
Haz que la función devuelva el precio con descuento y usa el valor retornado en otra expresión.
80 85
La salida aparecerá aquí.
Necesito una pista
- El cálculo ya existe. Sustituye
print(...)dentro de la función porreturn .... - Después la llamada produce un valor que puede guardarse y reutilizarse.
Ver una solución razonada
def aplicar_descuento(precio, descuento):
return precio - descuento
precio_final = aplicar_descuento(100, 20)
print(precio_final)
print(precio_final + 5)Un método sencillo para diseñar funciones pequeñas
- Escribe qué información necesita la tarea: esos datos pueden convertirse en parámetros.
- Decide qué cálculo o transformación debe realizar.
- Pregunta qué valor necesita recibir el resto del programa: ese suele ser el
return.
Si una función empieza a necesitar demasiadas entradas o intenta hacer varias tareas distintas, quizá convenga dividirla. No necesitas hacerlo perfecto desde el principio.
La trampa de imprimir dentro de todas las funciones
Cuando estás aprendiendo, print() parece resolver todo porque ves un resultado inmediatamente. Pero una función de cálculo suele ser más útil si devuelve el resultado y deja que otra parte del programa decida si imprimirlo, guardarlo o combinarlo.
Si puedes mirar una función y señalar sus entradas, el trabajo que realiza y el valor que devuelve, ya tienes el modelo correcto.