Uso de *args y **kwargs en funciones de Python
Clase 51 de 63 • Curso de Python
Resumen
¿Qué son los args
y kwargs
y cómo te ayudan en programación?
En el mundo de la programación, especialmente cuando trabajamos con funciones, nos encontramos con situaciones donde la cantidad de argumentos que vamos a recibir es incierta. Aquí es donde los args
y kwargs
se convierten en aliados indispensables. Estos mecanismos permiten manejar un número variable de argumentos o parámetros, otorgando flexibilidad y dinamismo a las funciones que creamos.
¿Cómo usar *args
para argumentos variables?
*args
es una herramienta que se utiliza para recibir un número indefinido de argumentos. En Python, cuando definimos una función y le precedemos de un asterisco *
, indicamos que estamos listos para recibir múltiples argumentos.
def sum_numbers(*args):
return sum(args)
# Llamada a la función con diferentes números de argumentos
print(sum_numbers(1, 2, 3, 4, 5)) # Retorna 15
print(sum_numbers(1, 2)) # Retorna 3
print(sum_numbers(7, 8, 9, 10)) # Retorna 34
Consideraciones:
- Los
args
se almacenan en una tupla inmutable. - Este método es ideal cuando no se conoce de antemano la cantidad de argumentos que la función recibirá.
¿Cómo manejar argumentos con **kwargs
?
Cuando se requiere trabajar con argumentos que poseen etiquetas (es decir, pares de llave y valor), el método adecuado es **kwargs
. Al anteponer dos asteriscos **
a nuestra variable, indicamos que estamos preparados para recibir argumentos con nombre.
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
# Llamada a la función con diferentes argumentos
print_info(name="Carlos", age=30, city="Bogotá")
# Salida:
# name: Carlos
# age: 30
# city: Bogotá
Detalles importantes:
kwargs
se almacena como un diccionario.- Ofrece flexibilidad para gestionar múltiples parámetros y modificarlos sin alterar la estructura de la función.
¿Cómo combinar args
y kwargs
en clases?
En programación orientada a objetos, también es posible emplear args
y kwargs
, especialmente para ofrecer flexibilidad en la inicialización de clases.
class Empleado:
def __init__(self, name, *skills, **details):
self.name = name
self.skills = skills
self.details = details
def show_info(self):
print(f"Name: {self.name}")
print(f"Skills: {self.skills}")
print(f"Details: {self.details}")
# Creación de un objeto e instancia de la clase
empleado = Empleado("Carlos", "Python", "Java", "C++", age=30, city="Bogotá")
empleado.show_info()
¿Qué es el desempaquetado y cuándo usarlo?
El desempaquetado permite extraer valores de listas o diccionarios y pasarlos a una función sin tener que especificar cada valor individualmente. Esto puede realizarse tanto con args
(usando *
) como con kwargs
(usando **
).
def suma(a, b, c):
return a + b + c
# Desempaquetado de lista
valores = [1, 2, 3]
print(suma(*valores)) # Retorna 6
def mostrar_informacion(name, age):
print(f"Name: {name}, Age: {age}")
# Desempaquetado de diccionario
datos = {'name': 'Carlos', 'age': 30}
mostrar_informacion(**datos)
Conclusiones y práctica recomendada
Para llevar a la práctica estos conceptos, te sugerimos crear funciones que puedan recibir listas de precios y descuentos aplicables usando *args
y **kwargs
. La clave está en discernir cuándo es necesario un enfoque u otro y cómo podemos sacar provecho del dinamismo que ofrecen estos mecanismos.
La programación con args
y kwargs
no solo ofrece mayor flexibilidad, sino que también mejora la legibilidad y eficiencia de nuestro código. Anímate a continuar explorando estos conceptos y aplicarlos en tus proyectos diarios.