SolveConPython

¿Qué son *args y **kwargs en Python y cuándo usarlos? Explicación clara

Al empezar con funciones en Python, tarde o temprano aparece algo como esto:

def mi_funcion(*args, **kwargs):
...

Y la reacción típica es:
¿qué es esto y por qué hay asteriscos por todos lados?

En este artículo aprenderás:

  • Qué son *args y **kwargs
  • Para qué sirven
  • Cómo usarlos correctamente
  • Cuándo NO usarlos
  • Errores comunes de principiantes

Todo explicado de forma sencilla y práctica.

¿Qué significa *args?

*args permite que una función reciba un número variable de argumentos.

Ejemplo sin *args:

def sumar(a, b):
return a + b

Esto solo acepta dos valores.

Usar *args

def sumar(*args):
total = 0
for numero in args:
total += numero
return total

Llamadas válidas:

sumar(1, 2)
sumar(1, 2, 3, 4)
sumar(10)

Aquí:

  • args es una tupla
  • Contiene todos los argumentos pasados

¿Qué significa **kwargs?

**kwargs permite recibir argumentos con nombre (clave–valor).

Ejemplo:

def mostrar_datos(**kwargs):
for clave, valor in kwargs.items():
print(clave, ":", valor)

Llamada:

mostrar_datos(nombre="Ana", edad=30, ciudad="Madrid")

Aquí:

  • kwargs es un diccionario
  • Contiene pares clave–valor

Diferencia clara entre *args y **kwargs

  • *args → argumentos sin nombre → tupla
  • **kwargs → argumentos con nombre → diccionario

Usar *args y **kwargs juntos

def ejemplo(*args, **kwargs):
print(args)
print(kwargs)
print(kwargs)

Llamada:

ejemplo(1, 2, 3, nombre="Carlos", activo=True)

Orden correcto en funciones

Cuando se combinan parámetros:

def funcion(a, b, *args, **kwargs):
pass

Orden obligatorio:

  1. Parámetros normales
  2. *args
  3. **kwargs

Cuándo usar *args y **kwargs

Úsalos cuando:

  • No sabes cuántos argumentos vendrán
  • Escribes funciones flexibles
  • Creas APIs o utilidades reutilizables

Ejemplo típico:

  • Funciones de logging
  • Funciones que envuelven otras funciones
  • Librerías

Cuándo NO usarlos (muy importante)

No los uses:

  • Solo “porque sí”
  • Cuando la función puede ser clara con parámetros normales
  • Si hace el código menos legible

Para principiantes, úsalos con moderación.

Errores comunes con *args y **kwargs

Error 1: Pensar que los nombres importan

Los nombres args y kwargs son una convención, no una regla.

def f(*valores):
pass

Funciona igual, aunque no es recomendable cambiar los nombres.

Error 2: Tratar args como lista

args es una tupla.
No puedes modificarla directamente.

Error 3: Usarlos sin entenderlos

Esto genera funciones confusas y difíciles de mantener.

Ejemplo práctico realista

def registrar_evento(evento, *args, **kwargs):
print("Evento:", evento)
print("Datos:", args)
print("Opciones:", kwargs)

Uso:

registrar_evento(
"login",
"usuario123",
ip="192.168.1.1",
exito=True
)

Practicar *args y **kwargs

La mejor forma de aprenderlos es:

  • Ver ejemplos reales
  • Usarlos en funciones pequeñas
  • No abusar de ellos

👉 En SolveConPython.com encontrarás retos donde este patrón aparece de forma natural, no forzada.

Conclusión

*args y **kwargs hacen que las funciones en Python sean muy flexibles, pero:

  • No son obligatorios
  • No son para todo
  • Deben usarse con criterio

Entenderlos bien te ayudará a leer y escribir mejor código Python.

Siguiente artículo

¿Cómo usar funciones lambda en Python? Usos comunes y límites