Uso de *args y **kwargs en funciones de Python

Clase 51 de 63Curso de Python

Contenido del curso

Fundamentos de Programación y Python

Programación Orientada a Objetos en Python

Conceptos avanzados de Python

Métodos y estructura de clases en Python

Resumen

Cuando construyes funciones o métodos en Python, no siempre sabes de antemano cuántos datos vas a recibir. Dominar el uso de args y kwargs te permite escribir código flexible que acepta una cantidad variable de argumentos, ya sea sin nombre o con nombre. A continuación se explican estas técnicas con ejemplos prácticos que incluyen funciones y clases.

¿Cómo funcionan los args para recibir argumentos sin nombre?

Los args (precedidos por un asterisco *) permiten que una función reciba un número indefinido de argumentos no posicionales, es decir, sin asignarlos a una variable específica. Internamente, Python los almacena en una tupla, lo que significa que son inmutables [01:36].

El nombre args es una convención; podrías usar cualquier otro, pero por buenas prácticas se mantiene este. Veamos un ejemplo sencillo:

python def sum_numbers(*args): return sum(args)

print(sum_numbers(1, 2, 3, 4, 5)) # 15 print(sum_numbers(1, 2)) # 3 print(sum_numbers(7, 8, 9, 10)) # 34

Cada invocación pasa una cantidad distinta de parámetros y la función los procesa sin problemas [02:25]. La clave está en el asterisco antes del nombre: le indica a Python que agrupe todo lo que llegue en una tupla.

¿Qué son los kwargs y cuándo se usan argumentos con nombre?

Los kwargs (keyword arguments) se declaran con doble asterisco ** y reciben argumentos posicionales con nombre, es decir, pares clave=valor. Python los almacena en un diccionario [03:22].

python def print_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}")

print_info(name="Carlos", age=30, city="Bogotá")

Si después necesitas agregar más datos, como country="Colombia", la función los acepta sin modificar su definición [04:40]. Esto resulta muy útil cuando la estructura de información puede crecer o variar entre llamadas.

¿Cómo combinar parámetros directos, args y kwargs en una clase?

Es posible mezclar las tres técnicas en un mismo constructor o método. Se define primero el parámetro directo, luego *args y finalmente **kwargs [05:17].

python class Employee: def init(self, name, *args, **kwargs): self.name = name self.skills = args self.details = kwargs

def show_info(self): print(f"Name: {self.name}") print(f"Skills: {self.skills}") print(f"Details: {self.details}")

emp = Employee("Carlos", "Python", "Java", "C++", age=30, city="Bogotá") emp.show_info()

  • "Carlos" se asigna directamente a name.
  • "Python", "Java" y "C++" van a args como tupla porque no tienen nombre.
  • age=30 y city="Bogotá" van a kwargs como diccionario porque sí tienen nombre [06:55].

Esta separación permite que cada empleado tenga un número diferente de skills y de detalles adicionales.

¿Qué es el desempaquetado de args y kwargs?

Cuando la información ya existe en una variable externa, puedes desempaquetarla al pasarla a una función [08:05].

¿Cómo desempaquetar una lista con un solo asterisco?

python def add(a, b, c): return a + b + c

values = (1, 2, 3) print(add(*values)) # 6

El asterisco antes de values extrae cada elemento de la tupla y lo coloca como argumento independiente.

¿Cómo desempaquetar un diccionario con doble asterisco?

python def show_info(name, age): print(f"{name} tiene {age} años")

data = {"name": "Carlos", "age": 30} show_info(**data)

El doble asterisco descompone el diccionario en pares clave=valor que coinciden con los parámetros de la función [09:00].

¿Cuándo elegir args y cuándo kwargs?

  • Usa *args cuando recibas valores sin etiqueta, como una lista de precios o puntuaciones.
  • Usa **kwargs cuando necesites pares clave-valor, como configuraciones, descuentos o metadatos.
  • Combínalos con parámetros directos cuando haya datos que siempre sean obligatorios.

Como reto, intenta crear una función que reciba una cantidad variable de precios con *args y un descuento opcional con **kwargs, aplicando ese descuento a los productos indicados. La práctica te ayudará a identificar rápidamente cuál técnica usar en cada situación. ¿Qué combinación te resultó más útil? Comparte tu solución en los comentarios.