*args y **kwargs

*args

Python proporciona una forma de manejar cantidades arbitrarias de argumentos en una función mediante símbolos especiales. Estos símbolos son * y **, y se usan delante de los nombres de variables para denotar *args y **kwargs respectivamente. Puedes asignar cualquier nombre a los parámetros *args o **kwargs, pero por convención se les llama args (arguments) y kwargs (keyword arguments).

*args se utiliza para enviar a la función un número arbitrario de argumentos sin palabras clave. Aquí tienes un ejemplo:

def add(*args):
    res = 0             # Inicializa el resultado final a 0
    for num in args:    # Recorre la lista de argumentos pasados
        res += num      # Suma cada número al total
    return res

print(add(3, 5, 7, 9))  # 24

En este programa, args es una tupla con los valores que pasamos a la función. Así, en el ejemplo anterior, args equivale a (3, 5, 7, 9). De esta manera, podemos pasar cualquier cantidad de argumentos a nuestra función.

**kwargs

**kwargs nos permite pasar un número arbitrario de argumentos con palabras clave. En otras palabras, usamos **kwargs para enviar cualquier cantidad de argumentos nombrados a nuestra función. Aquí tienes un ejemplo:

def introduce(**kwargs):
    for key, value in kwargs.items():  # Recorre todos los pares clave-valor
        print(f'{key}: {value}')       # Imprime cada par clave-valor

introduce(Name='Alice', Age=25, Country='USA')  
# 'Name: Alice'
# 'Age: 25'
# 'Country: USA'

En el programa anterior, kwargs es un diccionario con los pares clave-valor que pasamos a la función. Así, en el ejemplo, kwargs equivale a {'Name': 'Alice', 'Age': 25, 'Country': 'USA'}.

También puedes combinar *args y **kwargs en una llamada a función. *args debe colocarse antes de **kwargs.

def combined_example(*args, **kwargs):
    print(args)    # Imprime la tupla de argumentos
    print(kwargs)  # Imprime el diccionario de argumentos con palabras clave

combined_example(1, 2, 3, Name='Alice', Age=25)  
# (1, 2, 3)
# {'Name': 'Alice', 'Age': 25}

En esta función, args es una tupla con los valores (1, 2, 3) y kwargs es un diccionario con los valores {'Name': 'Alice', 'Age': 25}.

Esta flexibilidad para manejar cualquier cantidad de argumentos y argumentos con palabras clave puede ser muy útil cuando quieres que tus funciones sean más dinámicas y versátiles.

Combinando *args y **kwargs con argumentos regulares de función

*args y **kwargs pueden usarse junto con argumentos regulares de función. En estos casos, debes tener en cuenta algunas reglas:

  1. El orden correcto de los argumentos en la definición de la función debe ser: argumentos estándar, *args, y luego **kwargs.

  2. Los argumentos estándar (también conocidos como argumentos posicionales) siempre deben especificarse antes de *args y **kwargs.

def function_example(a, b, *args, **kwargs):
    print(a)       # Imprime el primer argumento estándar
    print(b)       # Imprime el segundo argumento estándar
    print(args)    # Imprime argumentos adicionales sin palabras clave
    print(kwargs)  # Imprime argumentos con palabras clave

function_example(1, 2, 3, 4, 5, Name='Alice', Age=25)
# 1
# 2
# (3, 4, 5)
# {'Name': 'Alice', 'Age': 25}

Aquí, 1 y 2 son argumentos estándar que corresponden a a y b en la definición de la función. La tupla (3, 4, 5) representa argumentos adicionales que se agrupan en args. Los argumentos nombrados restantes se agrupan en kwargs como un diccionario.

Al usar *args y **kwargs con argumentos estándar, asegúrate de no olvidar los argumentos estándar al llamar a la función, ya que esto generaría un TypeError. Por ejemplo, llamar a function_example(1, Name='Alice', Age=25) sin proporcionar un valor para el argumento b resultaría en un error.

To check your solution you need to sign in

Sign in to continue

Sign in to your account

By continuing, you agree to our Terms of Service and Privacy Policy.