Uso de kwargs para crear un cliente de APIs flexible

Clase 8 de 25Curso de Python Intermedio para Entornos virtuales y PEP8

Resumen

Domina cómo usar parámetros nombrados y dinámicos en Python para construir un API client flexible. Aquí verás cómo los keywords (también llamados kwargs) se reciben como diccionario, cómo combinarlos con args y cómo aplicar el doble asterisco para fusionar configuraciones y seleccionar entre News API y Guardian con una sola función.

¿Qué son keywords y por qué combinarlos con args?

Los keywords se envían con nombre y se reciben con doble asterisco: kwargs. A diferencia de args, que solo capturan valores posicionales, kwargs agrupa parámetros nombrados en un diccionario. Esto permite pasar pares key-value y trabajar con ellos de forma dinámica y clara.

  • kwargs es un diccionario. Permite inspeccionar keys y valores de entrada.
  • Key-value nombrado. Claridad al invocar funciones y reutilizarlas.
  • Combinación con args. Flexibilidad total con parámetros posicionales y nombrados.

Ejemplo base de impresión de keywords:

def ejemplo_keywords(**keywords): print(type(keywords)) # dict print(keywords) # {'llave': 'valor', ...} print('---') # llamada de ejemplo # ejemplo_keywords(llave='valor', api_key='demo')

¿Cómo implementar kwargs en una función flexible?

La idea central: crear una función única que, según el nombre de la API, seleccione el API client correcto, mezcle una configuración base con parámetros dinámicos, y ejecute la llamada. El resultado es una función robusta y reutilizable.

def fetch_news(api_name, *args, **keywords): """ función flexible para conectar con la API. """ # configuración base común a múltiples APIs base_config = { "timeout": ..., # por defecto "retries": ..., # por defecto } # fusión de configuración: base + parámetros nombrados entrantes config = {**base_config, **keywords} # selección de cliente por nombre api_clients = { "newsAPI": news_api_client, # referencia a cliente de News API "Guardian": guardian_client, # referencia a cliente de Guardian } client = api_clients[api_name] return client(*args, **config)

¿Cómo funcionan los diccionarios y el doble asterisco?

  • **Desempaquetado con : copiar pares key-value dentro de otro diccionario.
  • Mezcla de configuraciones: {**base_config, **keywords} agrega y sobrescribe de forma limpia.
  • **Invocación con : client(*args, **config) pasa parámetros de forma explícita.

¿Qué orden de parámetros es correcto en Python?

  • Obligatorios primero: por ejemplo, api_name al inicio.
  • Luego args: parámetros posicionales variables.
  • **Al final kwargs: parámetros nombrados y dinámicos.

¿Cómo se selecciona el cliente por nombre?

  • Mapa de clientes: un diccionario api_clients con el nombre como clave.
  • Búsqueda directa: client = api_clients[api_name] elige el ejecutor correcto.
  • Una sola función: orquesta múltiples fuentes como News API y Guardian.

¿Cómo usarlo con News API y Guardian?

Con una misma función puedes enviar parámetros distintos y obtener resultados de diferentes orígenes. La clave está en pasar keywords específicos de cada servicio, manteniendo una base_config con timeout y retries.

  • Ejemplo con News API.
  • Ejemplo con Guardian con sección y fecha.
  • Misma función, distintos parámetros, mismo flujo.

Invocaciones ilustrativas:

# News API fetch_news( "newsAPI", api_key="demo", query="noticias de Python", ) # Guardian fetch_news( "Guardian", api_key="Demoguardian", section="sports", from_date="2020-10-10", )

Conceptos y habilidades que te llevas:

  • **kwargs como diccionario para parámetros nombrados.
  • **args para valores posicionales flexibles.
  • Key-value explícito para legibilidad y mantenimiento.
  • **Desempaquetado con ** para fusionar configuraciones.
  • Configuración base con timeout y retries reutilizable.
  • Selección de cliente por nombre mediante diccionario de API clients.
  • Orden correcto de parámetros: obligatorios, args, **kwargs.

¿Tienes dudas sobre cómo adaptar los parámetros de tu API favorita o cómo estructurar tu base_config? Deja tu pregunta y cuéntanos tu caso para ayudarte a concretarlo.