1 usuario conectado

Funciones. Argumentos variables en Python.*Args y **kwargs

Comparte esto

Vamos a revisar los argumentos variables (*args y **kwargs) para que queden bien claros.

*args (Argumentos Posicionales Variables):

Imagina que quieres crear una función que pueda recibir cualquier número de argumentos, sin tener que definir cada uno de ellos individualmente. Aquí es donde entra en juego *args.

Ejemplo:

Python
 
def mi_funcion_args(*args):
    print("Argumentos recibidos:", args)
    for arg in args:
        print("Argumento:", arg)

mi_funcion_args(1, "hola", 3.14)

Salida:

Argumentos recibidos: (1, 'hola', 3.14)
Argumento: 1
Argumento: hola
Argumento: 3.14

En este ejemplo, al llamar a mi_funcion_args con 1, "hola", y 3.14, todos estos valores se agrupan en la tupla args dentro de la función.

Uso típico: Para funciones que necesitan operar sobre una cantidad indefinida de elementos, como sumar números, encontrar el máximo, etc.
 

**kwargs (Argumentos de Palabra Clave Variables):

Ahora, ¿qué pasa si quieres pasar argumentos a una función usando nombres (palabras clave), y no sabes cuántos de estos argumentos con nombre se pasarán? Aquí es donde **kwargs es útil.

Ejemplo:

Python
 
def mi_funcion_kwargs(**kwargs):
    print("Argumentos con nombre recibidos:", kwargs)
    for clave, valor in kwargs.items():
        print(f"Clave: {clave}, Valor: {valor}")

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

Salida:

Argumentos con nombre recibidos: {'nombre': 'Ana', 'edad': 30, 'ciudad': 'Madrid'}
Clave: nombre, Valor: Ana
Clave: edad, Valor: 30
Clave: ciudad, Valor: Madrid

En este caso, los argumentos nombre="Ana", edad=30, y ciudad="Madrid" se recogen en el diccionario kwargs.

Uso típico: Para funciones que aceptan una variedad de opciones configurables o para pasar atributos a otras funciones de manera flexible.

Combinación de *args y **kwargs:

Es común ver funciones que utilizan ambos *args y **kwargs en su definición. Esto permite a la función aceptar tanto un número variable de argumentos posicionales como un número variable de argumentos con nombre. Recuerda que, en la definición de la función, *args debe aparecer antes de **kwargs.

 

Python
 

def funcion_combinada(*args, **kwargs):
    print("Args:", args)
    print("Kwargs:", kwargs)

funcion_combinada(1, 2, "tres", nombre="Beto", profesion="Artista")

Salida:

Args: (1, 2, 'tres')
Kwargs: {'nombre': 'Beto', 'profesion': 'Artista'}

Aquí, 1, 2, y "tres" se recogen en la tupla args, mientras que nombre="Beto" y profesion="Artista" se recogen en el diccionario kwargs.

En resumen:

Ambos son muy útiles para crear funciones más flexibles y que puedan manejar diferentes formas de entrada.