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
*argsy**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í:
argses 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í:
kwargses 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:
- Parámetros normales
*args**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