Resumen

Domina los argumentos dinámicos con args en Python para crear funciones más flexibles, especialmente al integrar múltiples APIs de noticias con parámetros variables como query, section o from_date. Aquí verás cómo capturar argumentos posicionales, por qué el orden importa y cómo declarar parámetros obligatorios como la API key.

¿Qué son los argumentos dinámicos args en Python?

Los argumentos dinámicos permiten recibir un número variable de parámetros posicionales. En Python se definen con un asterisco y el nombre convencional args. Internamente, args es una tupla: inmutable, ordenada y accesible por índice.

  • Se definen con un asterisco antes del nombre del parámetro.
  • Se almacenan como tupla inmutable.
  • El orden de los argumentos posicionales es crucial.

¿Cómo se usan args con ejemplos de código?

def ejemplo_args(*args):
    print(f"args: {args}")
    print(f"type: {type(args)}")

# Llamadas de ejemplo
Ejemplo = ejemplo_args
Ejemplo(1, 2, 3)
Ejemplo("Hola", "mundo")
Ejemplo()  # sin parámetros
  • La impresión muestra la representación de una tupla.
  • El tipo reportado es tuple.

¿Cómo aplicar args en un client de noticias?

Cuando integras varias APIs con requisitos distintos, args ayuda a unificar llamadas mientras mantienes API key como parámetro obligatorio. Se mostraron dos variantes: un client para News API y otro para Guardian, cada uno con parámetros distintos como query, section o from_date, y configuraciones como timeout en 30 y retries en 3.

def news_api_client(api_key, query, timeout=30, retries=3):
    return f"News API: query={query}, timeout={timeout}"

def guardian_client(api_key, section, from_date, timeout=30, retries=3):
    print(f"Guardian: section={section}")
    print(f"From_date={from_date}")
    print(f"Timeout={timeout}")
    # retries sin usar
  • News API usa query y puede fijar timeout 30 y retries 3.
  • Guardian requiere section y from_date además de la API key.

Para generalizar con parámetro obligatorio y resto dinámico:

def client_dinamico(api_key_value, *args):
    print(f"API key: {api_key_value}")
    print(f"args: {args}")

# Llamadas
client_dinamico("mi_api_key", "q=python", 30)
client_dinamico("mi_api_key")
# client_dinamico()  # error: falta el argumento posicional obligatorio api_key_value
  • API key primero: asegura el parámetro obligatorio.
  • args captura valores extra como query, timeout o banderas.

¿Por qué el orden posicional importa en args?

  • Python asigna por posición: el primer valor va al primer parámetro.
  • Si colocas el parámetro obligatorio después de args, Python no distingue dónde terminan los dinámicos.
  • Para evitar ambigüedad, pon API key antes y el resto en args.

¿Qué prácticas y ejercicio refuerzan el uso de args?

A la hora de validar y usar args en funciones reales:

  • Define parámetros obligatorios como la API key al inicio.
  • Usa timeout 30 y retries 3 como valores por defecto cuando apliquen.
  • Imprime separadores y tipos para depurar rápidamente.
  • Considera validaciones si ciertos argumentos son requeridos por la API.

Ejercicio propuesto: crear una función que sume todos los números recibidos por args.

def sumar_todos(*args):
    return sum(args)

# Ejemplos
print(sumar_todos(1, 2, 3))        # 6
print(sumar_todos(10, 20, 30, 40)) # 100

¿Tienes una variante con validaciones o un client dinámico que uses a diario? Compártelo en comentarios y cuéntanos tu enfoque.