Funciones en Python: parámetros, retorno y diseño reutilizable

Construye funciones claras y reutilizables entendiendo entrada, salida, scope y contratos de uso con ejemplos reales.

Una función encapsula una unidad de lógica: recibe datos (parámetros), procesa y devuelve resultado (`return`).

Separar lógica en funciones evita duplicación y facilita pruebas unitarias.

El contrato de una función se define por su firma: qué recibe, qué devuelve y qué asunciones hace.

Diseñar funciones pequeñas y con responsabilidad única reduce deuda técnica desde fases tempranas.

  • Si una función no retorna explícitamente, Python devuelve `None`.
  • Una diferencia importante: `print(...)` muestra información, `return` entrega un valor para que otra parte del programa lo use.
  • Cuando confundes `print` con `return`, el código parece funcionar localmente, pero no se puede reutilizar en pipelines o tests.
  • Piensa la función como una caja negra: entra dato, sale dato. Lo demás es implementación interna.
  • Definir defaults reduce ruido en llamadas repetitivas.

1) `def` y `return`: forma básica de una función

Si una función no retorna explícitamente, Python devuelve `None`.

Una diferencia importante: `print(...)` muestra información, `return` entrega un valor para que otra parte del programa lo use.

Cuando confundes `print` con `return`, el código parece funcionar localmente, pero no se puede reutilizar en pipelines o tests.

Piensa la función como una caja negra: entra dato, sale dato. Lo demás es implementación interna.

2) Parámetros posicionales, por defecto y nombrados

Definir defaults reduce ruido en llamadas repetitivas.

Un parámetro por defecto permite no repetir valores comunes en cada llamada.

Las llamadas con argumentos nombrados (`func(iva=0.10)`) mejoran legibilidad cuando hay varios parámetros similares.

Regla útil: parámetros obligatorios primero, opcionales al final con valores por defecto razonables.

3) Scope (ámbito): variables locales vs globales

Una función debe depender preferentemente de sus parámetros, no de estado global oculto.

Variables definidas dentro de una función viven en ámbito local y no contaminan el resto del programa.

Cuanto más dependa una función de variables globales, más difícil será testearla y mantenerla.

Diseña funciones puras cuando sea posible: mismas entradas -> mismas salidas.

  • Evita mutar estado global sin necesidad.
  • Prefiere retorno de datos frente a efectos laterales.
  • Tipa parámetros y retorno para clarificar contrato.
  • Nombra funciones por intención de negocio.
Python
06

Funciones en Python: parámetros, retorno y diseño reutilizable

Construye funciones claras y reutilizables entendiendo entrada, salida, scope y contratos de uso con ejemplos reales.

Código del tema: def procesar(datos): return datos

📘 Teoría

1) `def` y `return`: forma básica de una función

Si una función no retorna explícitamente, Python devuelve `None`.

1

Una diferencia importante: `print(...)` muestra información, `return` entrega un valor para que otra parte del programa lo use.

2

Cuando confundes `print` con `return`, el código parece funcionar localmente, pero no se puede reutilizar en pipelines o tests.

3

Piensa la función como una caja negra: entra dato, sale dato. Lo demás es implementación interna.

Función con retorno explícito
def area_rectangulo(base: float, altura: float) -> float:
    return base * altura


resultado = area_rectangulo(5, 3)
print(resultado)

2) Parámetros posicionales, por defecto y nombrados

Definir defaults reduce ruido en llamadas repetitivas.

Un parámetro por defecto permite no repetir valores comunes en cada llamada.

Las llamadas con argumentos nombrados (`func(iva=0.10)`) mejoran legibilidad cuando hay varios parámetros similares.

Regla útil: parámetros obligatorios primero, opcionales al final con valores por defecto razonables.

1

Parámetro por defecto

Valor usado cuando no se especifica en llamada.

2

Argumentos nombrados

Útiles para evitar confusión en llamadas largas.

3) Scope (ámbito): variables locales vs globales

Una función debe depender preferentemente de sus parámetros, no de estado global oculto.

Variables definidas dentro de una función viven en ámbito local y no contaminan el resto del programa.

Cuanto más dependa una función de variables globales, más difícil será testearla y mantenerla.

Diseña funciones puras cuando sea posible: mismas entradas -> mismas salidas.

  • Evita mutar estado global sin necesidad.
  • Prefiere retorno de datos frente a efectos laterales.
  • Tipa parámetros y retorno para clarificar contrato.
  • Nombra funciones por intención de negocio.
Ejemplo de función dependiente de entrada
def aplicar_descuento(precio: float, descuento: float) -> float:
    return precio - (precio * descuento)


print(aplicar_descuento(120, 0.15))

🧪 Aprende probando

🏁 Retos

Reto Reto: devuelve el saludo en vez de imprimirlo Transforma la función para que retorne un valor reutilizable.

🧰 Recursos

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .