Curso de Python Intermedio para  Entornos virtuales y PEP8

Kwargs en Python: cliente flexible para APIs

Curso de Python Intermedio para Entornos virtuales y PEP8

Contenido del curso

Kwargs en Python: cliente flexible para APIs

Resumen

Aprender a usar kwargs en Python te permite crear funciones flexibles que reciben parámetros nombrados y construir un cliente de APIs reutilizable con poco código. Esta guía es ideal si programas en Python y quieres conectar servicios como NewsAPI o The Guardian con una sola función.

La idea central es sencilla: los keywords funcionan parecido a los args, con una diferencia clave. Mientras los args pasan valores sin nombre, los kwargs pasan valores nombrados, es decir, conservan el nombre de la variable tal como la enviaste para que puedas usarla dentro de la función. Y aquí viene lo interesante: combinar ambos te da una función robusta.

Cómo funcionan los kwargs y en qué se diferencian de los args

Cuando defines una función con kwargs, usas dos asteriscos delante del parámetro. En el ejemplo de args se usa un solo asterisco y los valores no van nombrados. Con dos asteriscos es como decir key value: cada par representa un nombre y su valor [00:15].

Aunque el nombre del parámetro puede ser cualquiera, por convención siempre se escribe kwargs. Veamos el ejemplo básico:

python def ejemplo_keywords(**kwargs): print(type(kwargs)) print(kwargs) print("-----")

ejemplo_keywords(key="value", llave="valor")

Al ejecutarlo notas algo importante: el tipo que devuelve es un diccionario [01:32]. Ese diccionario guarda el nombre con el que pasaste el parámetro como llave y el valor que enviaste como su contenido.

¿Qué devuelve kwargs en Python? Devuelve un diccionario donde cada llave es el nombre del parámetro que enviaste y cada valor es lo que asociaste a ese nombre. Así recibes todos los datos nombrados en una sola estructura.

Lo curioso es que la función no declara ningún valor nombrado directamente, pero tú envías esos valores nombrados y los recuperas todos juntos en un diccionario listo para usar. Fíjate que en el ejemplo se usa una palabra en español, llave, justo para dejar claro que se recibe de forma dinámica.

Cómo construir una función flexible para conectar con varias APIs

Aquí es donde args y kwargs se vuelven poderosos. La meta es tener un solo método que obtenga un cliente de API tanto de NewsAPI como de The Guardian. Con la misma función puedes pasarle parámetros distintos y seguirá funcionando [03:20].

Por ejemplo, para NewsAPI puedes enviar un api_key con valor demo y una query con noticias de Python. Para The Guardian puedes enviar un api_key demo Guardian, una section de sports y una fecha como 2020-10-10. Misma función, parámetros diferentes.

La función principal se llama fetch_news y sigue un orden que importa mucho:

  1. El parámetro obligatorio api_name, que indica qué API quieres usar.
  2. Luego los args.
  3. Al final los kwargs.

Recuerda esta regla: los parámetros obligatorios van al comienzo y los opcionales o dinámicos van a la derecha. Si inviertes el orden, Python protesta.

¿Por qué el orden de args y kwargs importa en Python? Porque los parámetros obligatorios deben ir primero y los dinámicos al final. Si pones kwargs antes de un parámetro obligatorio, la función lanza un error de sintaxis.

Cómo mezclar una configuración base con kwargs usando dos asteriscos

Dentro de la función defines una configuración base en un diccionario. Son los valores que se repiten en todas las APIs, como timeout y retries [05:40].

python def fetch_news(api_name, *args, **kwargs): """Funcion flexible para conectar con la API""" base_config = { "timeout": 30, "retries": 3, } config = {**base_config, **kwargs}

api_clients = { "NewsAPI": NewsAPIClient, "Guardian": GuardianClient, } client = api_clients[api_name] return client(*args, **config)

Cuando escribes {**base_config, **kwargs} estás copiando dinámicamente los valores del diccionario base y sumando todos los que lleguen por kwargs. Así generas una configuración nueva que arranca con timeout y retries, y se completa cuando pasas datos como from_date o query [06:30].

Después creas el diccionario api_clients, donde cada llave es el nombre de la API (NewsAPI o Guardian) y su valor es el cliente correspondiente. Con api_clients[api_name] seleccionas el cliente según lo que ingrese el usuario.

Por último llamas al cliente pasándole los args requeridos y la configuración completa con doble asterisco. Usar **config es como desempacar cada campo del diccionario dentro de la llamada, uno por uno. Como la función hace fetch news, retornas el resultado.

Qué reto sigue después de dominar args y kwargs

Con esta estructura ya tienes una función que se conecta a cualquiera de las dos APIs desde un solo punto. Por ahora la conexión está simulada, así que el siguiente paso es hacerla real [09:10].

El reto propuesto tiene tres pasos concretos:

  • Entra a la pagina de NewsAPI y crea tu API key.
  • Instala la libreria Requests.
  • Agrega Requests dentro de la función para consultar noticias reales.

¿Ya intentaste combinar args y kwargs en tu propio cliente de API? Cuéntame en los comentarios cómo te fue con la implementación real.