certmundo.
es‑mx

6 min de lectura

Funciones

Lección 9: Funciones — El corazón de la programación reutilizable

Hasta este punto del curso has aprendido a trabajar con variables, condicionales, ciclos y estructuras de datos. Ya puedes escribir programas que resuelven problemas reales. Ahora viene el salto que separa a alguien que "sabe un poco de Python" de alguien que realmente piensa como programador: aprender a organizar tu código en funciones.

Las funciones son bloques de código con nombre que puedes ejecutar cuantas veces quieras. Son la base de casi cualquier programa profesional y la razón por la que el software puede crecer sin convertirse en un caos imposible de mantener.


¿Por qué existen las funciones?

Imagina que trabajas en una startup de tecnología financiera en CDMX —como Clip, Konfío o Kueski— y tu equipo necesita calcular el impuesto sobre un monto en decenas de lugares distintos dentro de la aplicación. Sin funciones, copiarías y pegarías el mismo código una y otra vez. Si la fórmula cambia, tendrías que buscar cada copia y corregirla manualmente.

Con funciones, escribes la lógica una vez y la reutilizas en cualquier parte. Ese principio se conoce como DRY (Don't Repeat Yourself, o "No te repitas"). Es uno de los principios más importantes en el desarrollo de software profesional.


Cómo definir una función

Para crear una función en Python usas la palabra clave def, seguida del nombre de la función, paréntesis y dos puntos. El código que pertenece a la función va indentado debajo.

# Función que calcula el salario neto después de impuestos (ISR simplificado)
def calcular_salario_neto(salario_bruto):
    tasa_isr = 0.10  # Tasa simplificada del 10% para el ejemplo
    impuesto = salario_bruto * tasa_isr
    salario_neto = salario_bruto - impuesto
    return salario_neto

# Probamos la función con distintos sueldos en MXN
sueldo_junior = calcular_salario_neto(18000)
sueldo_senior = calcular_salario_neto(45000)

print(f"Neto junior: ${sueldo_junior:,.0f} MXN")   # Neto junior: $16,200 MXN
print(f"Neto senior: ${sueldo_senior:,.0f} MXN")   # Neto senior: $40,500 MXN

Analicemos las partes clave de este ejemplo. La palabra def le dice a Python que vas a definir una función. calcular_salario_neto es el nombre que elegiste —debe ser descriptivo y usar guiones bajos para separar palabras, siguiendo las convenciones de Python. salario_bruto entre paréntesis es un parámetro, es decir, un valor que la función recibe para trabajar con él. Finalmente, return es la instrucción que devuelve el resultado al lugar desde donde se llamó la función.


Parámetros y argumentos

Los parámetros son las variables que defines al crear la función. Los argumentos son los valores reales que pasas cuando la llamas. Es una distinción técnica que escucharás mucho en equipos de desarrollo.

Python te permite definir parámetros con valores por defecto, lo que hace tus funciones más flexibles:

# Función para generar un saludo en una plataforma de trabajo remoto
def presentar_usuario(nombre, pais="México", rol="desarrollador"):
    saludo = f"Hola, soy {nombre}, {rol} desde {pais}."
    return saludo

# Llamadas con distintos argumentos
print(presentar_usuario("Valeria"))
# Hola, soy Valeria, desarrollador desde México.

print(presentar_usuario("Diego", "Colombia", "diseñador UX"))
# Hola, soy Diego, diseñador UX desde Colombia.

print(presentar_usuario("Fernanda", rol="data analyst"))
# Hola, soy Fernanda, data analyst desde México.

Nota cómo en la última llamada usamos el nombre del parámetro (rol=) para pasarlo directamente, sin importar su posición. Estos se llaman argumentos por palabra clave (keyword arguments) y son muy útiles cuando una función tiene muchos parámetros.


Valores de retorno

La instrucción return hace que la función entregue un resultado. Una función puede devolver cualquier tipo de dato: un número, una cadena, una lista, un diccionario o incluso otra función.

Si una función no tiene return, automáticamente devuelve None. Esto no siempre es un error —hay funciones cuyo propósito es realizar una acción, como imprimir algo, sin necesitar devolver un valor.

Un patrón útil es retornar múltiples valores a la vez. Python los empaqueta automáticamente en una tupla:

def estadisticas_ventas(ventas):
    total = sum(ventas)
    promedio = total / len(ventas)
    maximo = max(ventas)
    return total, promedio, maximo  # Devuelve tres valores

# Ventas semanales en MXN de una tienda en línea
ventas_semana = [12500, 9800, 15200, 11000, 18400]
t, p, m = estadisticas_ventas(ventas_semana)
print(f"Total: ${t:,} | Promedio: ${p:,.0f} | Máximo: ${m:,}")

Alcance de las variables (scope)

El scope o alcance define desde dónde puede accederse a una variable. Las variables que creas dentro de una función son locales: solo existen dentro de ella y desaparecen cuando la función termina.

Las variables definidas fuera de cualquier función son globales y pueden leerse desde cualquier parte del programa, aunque modificarlas desde adentro de una función requiere la palabra clave global —una práctica que conviene evitar porque hace el código difícil de mantener.

La regla práctica es sencilla: pasa los datos que una función necesita como parámetros y recibe sus resultados con return. Así tus funciones son predecibles, independientes y fáciles de probar —cualidades que cualquier equipo técnico en empresas como Mercado Libre, Rappi o una agencia de desarrollo valora mucho al revisar tu código.


Funciones integradas de Python

Python viene con decenas de funciones integradas (built-in functions) listas para usar sin necesidad de definirlas. Ya has usado varias a lo largo del curso sin notarlo:

print() muestra información en pantalla. len() devuelve la longitud de una cadena o lista. type() te dice de qué tipo es un dato. range() genera secuencias de números. input() captura texto del usuario. int(), float() y str() convierten entre tipos de datos. max(), min() y sum() hacen operaciones matemáticas sobre colecciones.

Conocer estas funciones te ahorra tiempo y hace tu código más limpio. No necesitas reinventar lo que Python ya tiene.


Organizar tu código con funciones

A medida que tus programas crezcan, la organización se vuelve crítica. Un archivo de Python bien estructurado generalmente sigue este patrón: primero las importaciones de módulos, luego la definición de funciones, y al final el código principal que las llama. En proyectos más grandes, las funciones se separan en archivos distintos llamados módulos.

Adoptar esta disciplina desde ahora te prepara para integrarte sin problema a equipos de trabajo real. Cuando apliques a una posición como desarrollador Python —ya sea en una empresa local en Monterrey o Guadalajara, o de forma remota para una compañía en Estados Unidos con salarios entre $3,000 y $6,000 USD mensuales— la calidad y legibilidad de tu código será uno de los primeros criterios de evaluación en entrevistas técnicas.

Una función bien escrita debe hacer una sola cosa y hacerla bien. Si una función empieza a necesitar más de 15 o 20 líneas, probablemente puede dividirse en funciones más pequeñas. Este principio de responsabilidad única es parte del pensamiento de ingeniería de software que distingue el código aficionado del profesional.


Lo que viene a continuación

Has recorrido un camino impresionante. Partiste desde las bases absolutas y ahora entiendes cómo pensar en código: estructurar lógica, manejar datos, repetir acciones y organizarlas en funciones reutilizables. Eso ya es programación real.

En la Lección 10: Próximos pasos y proyecto práctico, vas a unir todo lo que aprendiste en un proyecto completo que puedes mostrar en tu portafolio. También exploraremos qué sigue en tu camino como desarrollador: módulos y paquetes, trabajo con archivos, APIs web y las rutas profesionales más demandadas en el mercado tecnológico de México y América Latina. Prepárate, porque es donde todo cobra sentido.

Puntos clave

  • Las funciones permiten reutilizar código con el principio DRY, definidas con def, parámetros de entrada y return para devolver resultados
  • El **scope** (alcance) determina dónde viven las variables; lo recomendable es pasar datos como parámetros y recibir resultados con return para evitar efectos secundarios
  • Python incluye funciones integradas poderosas como len(), sum(), max() y range() que aceleran el desarrollo sin necesidad de código extra

Comparte esta lección: