Una función es un bloque de código con nombre que puedes ejecutar cuantas veces quieras sin repetirlo.
¿Alguna vez escribiste el mismo código dos veces y pensaste: "debe haber una mejor forma"? La hay. Se llama función. Hoy vas a aprender a crear las tuyas.
El problema que resuelven las funciones
Imagina que trabajas en el área de sistemas de Liverpool. Cada vez que un cliente compra algo, necesitas calcular el descuento. Sin funciones, tu código se ve así:
# Compra 1
precio1 = 850
descuento1 = precio1 * 0.10
precio_final1 = precio1 - descuento1
print("Precio final:", precio_final1)
# Compra 2
precio2 = 1200
descuento2 = precio2 * 0.10
precio_final2 = precio2 - descuento2
print("Precio final:", precio_final2)
¿Yes el problema? Repites las mismas tres líneas una y otra vez. Si el descuento cambia de 10% a 15%, tienes que editar cada bloque. Eso es lento y genera errores.
Con una función, escribes la lógica una sola vez. Luego la llamas cuando la necesitas.
Cómo crear tu primera función
En Python, usas la palabra def para crear una función. Así es la estructura:
def nombre_de_la_funcion(parametros):
# código aquí
return resultado
Tres partes clave: el nombre, los parámetros (datos de entrada) y el return (resultado de salida). Nota los dos puntos : al final y la indentación de cuatro espacios. ¿Te suena familiar? Es igual que en los ciclos y condicionales.
Ahora resolvemos el problema de Liverpool con una función:
def calcular_precio_final(precio):
descuento = precio * 0.10
precio_final = precio - descuento
return precio_final
Ya tienes la función. Ahora la usas así:
resultado1 = calcular_precio_final(850)
resultado2 = calcular_precio_final(1200)
resultado3 = calcular_precio_final(3500)
print(resultado1) # Muestra: 765.0
print(resultado2) # Muestra: 1080.0
print(resultado3) # Muestra: 3150.0
Tres compras distintas, una sola función. Si Liverpool cambia el descuento, solo editas un lugar. Así de poderoso es esto.
La historia de Carlos en Bimbo
Carlos es desarrollador junior en Bimbo, en la Ciudad de México. Su primera tarea fue calcular el salario semanal de los repartidores. Cada repartidor trabaja un número diferente de horas y gana $85 por hora.
Su primer intento fue un desastre: cincuenta líneas de código repetido para cincuenta repartidores. Su jefa le dijo: "¿Puedes simplificar esto?"
Carlos aprendió sobre funciones esa tarde. Al día siguiente llegó con esto:
def calcular_salario(horas_trabajadas):
tarifa_por_hora = 85
salario = horas_trabajadas * tarifa_por_hora
return salario
repartidor1 = calcular_salario(48)
repartidor2 = calcular_salario(52)
repartidor3 = calcular_salario(40)
print("Salario repartidor 1: $" + str(repartidor1))
print("Salario repartidor 2: $" + str(repartidor2))
print("Salario repartidor 3: $" + str(repartidor3))
Resultado en pantalla:
Salario repartidor 1: $4,080
Salario repartidor 2: $4,420
Salario repartidor 3: $3,400
Su jefa quedó impresionada. Carlos pasó de cincuenta líneas a doce. Eso es lo que hace una buena función: elimina la repetición y hace el código más fácil de leer.
Funciones con varios parámetros
Una función puede recibir más de un dato. Solo separas los parámetros con comas.
Sofía trabaja en el área de tecnología de FEMSA, en Monterrey. Necesita una función que calcule el costo total de un pedido: precio por unidad, número de unidades y porcentaje de IVA.
def calcular_total_pedido(precio_unitario, cantidad, iva):
subtotal = precio_unitario * cantidad
impuesto = subtotal * iva
total = subtotal + impuesto
return total
Sofía la usa así:
total_pedido1 = calcular_total_pedido(120, 50, 0.16)
total_pedido2 = calcular_total_pedido(350, 20, 0.16)
print("Total pedido 1: $" + str(total_pedido1))
print("Total pedido 2: $" + str(total_pedido2))
Resultado:
Total pedido 1: $6,960
Total pedido 2: $8,120
Con tres parámetros, la función es flexible. Puede calcular cualquier pedido, sin importar el precio o la cantidad. Sofía ya no calcula nada a mano.
Funciones que no regresan un valor
Not toda función necesita return. A veces solo quieres que haga algo, como imprimir un mensaje.
Esto se llama función de tipo procedimiento. Es útil para mostrar reportes o saludar a usuarios:
def mostrar_bienvenida(nombre_usuario):
print("Hola, " + nombre_usuario + ". Bienvenido a Mercado Libre.")
print("Tu sesión está activa.")
mostrar_bienvenida("Laura")
mostrar_bienvenida("Roberto")
Resultado:
Hola, Laura. Bienvenido a Mercado Libre.
Tu sesión está activa.
Hola, Roberto. Bienvenido a Mercado Libre.
Tu sesión está activa.
¿Yes? Sin return, pero sigue siendo útil. La función hace una tarea específica cada vez que la llamas.
Errores comunes al usar funciones
Aquí es donde muchos principiantes tropiezan. Toma nota.
Error 1: Olvidar los dos puntos
# Incorrecto
def calcular_descuento(precio)
return precio * 0.10
# Correcto
def calcular_descuento(precio):
return precio * 0.10
Sin los dos puntos, Python lanza un error de sintaxis. Siempre.
Error 2: Olvidar la indentación
# Incorrecto
def calcular_descuento(precio):
return precio * 0.10
# Correcto
def calcular_descuento(precio):
return precio * 0.10
El código dentro de la función debe tener cuatro espacios de sangría. Sin ellos, Python no sabe qué pertenece a la función.
Error 3: Llamar la función antes de definirla
# Incorrecto
resultado = calcular_descuento(500)
def calcular_descuento(precio):
return precio * 0.10
# Correcto
def calcular_descuento(precio):
return precio * 0.10
resultado = calcular_descuento(500)
Python lee el código de arriba hacia abajo. Si llamas la función antes de definirla, el programa no la encuentra.
Error 4: No usar el valor que regresa return
# Incorrecto (el resultado se pierde)
calcular_descuento(500)
# Correcto
descuento = calcular_descuento(500)
print(descuento)
Si tu función usa return, guarda el resultado en una variable. Si no lo haces, el valor se pierde para siempre.
Todo junto: un mini sistema para una tienda
Vamos a combinar todo lo que aprendiste hoy. Imagina una tienda pequeña en Guadalajara. Tiene tres funciones básicas:
def aplicar_descuento(precio, porcentaje):
return precio - (precio * porcentaje)
def calcular_iva(precio):
return precio * 0.16
def precio_total(precio_base, porcentaje_descuento):
con_descuento = aplicar_descuento(precio_base, porcentaje_descuento)
iva = calcular_iva(con_descuento)
total = con_descuento + iva
return total
# Usamos el sistema
producto1 = precio_total(1500, 0.10)
producto2 = precio_total(2800, 0.20)
print("Producto 1 con descuento e IVA: $" + str(round(producto1, 2)))
print("Producto 2 con descuento e IVA: $" + str(round(producto2, 2)))
Resultado:
Producto 1 con descuento e IVA: $1,566
Producto 2 con descuento e IVA: $2,598.4
Fíjate en algo importante: la función precio_total usa las otras dos funciones dentro de sí misma. Las funciones se pueden combinar. Así construyes programas grandes con piezas pequeñas y ordenadas.
Lo que lograste hoy
Empezaste con código repetido y desordenado. Ahora sabes cómo empaquetarlo en funciones limpias y reutilizables. Eso es exactamente lo que hacen los programadores profesionales todos los días.
La próxima vez que veas código repetido, pregúntate: ¿puedo convertir esto en una función? Casi siempre la respuesta es sí.