🧩 🌐 Parámetros nombrados y dinámicos en Python
🧠 IDEA CENTRAL
Usa *args y **kwargs para crear funciones flexibles, capaces de:
🔸 Aceptar cualquier cantidad de parámetros.
🔸 Fusionar configuraciones.
🔸 Conectarse a múltiples APIs (News API, The Guardian, etc.)
con una sola función.
🔹 1. Qué son los keywords (**kwargs)
📘 Definición:
Son parámetros nombrados que se reciben como diccionario.
Cada elemento tiene una clave y un valor.
📍 Sintaxis:
def ejemplo_keywords(**keywords):
print(type(keywords)) # dict
print(keywords)
🧩 Ventajas:
- 🔍 Permiten inspeccionar claves y valores.
- 🧱 Aumentan la claridad al invocar funciones.
- 🌀 Se combinan con *args para mayor flexibilidad.
🔸 2. Diferencias entre args y kwargs
🎯 *args → captura valores posicionales (sin nombre).
🎯 **kwargs → captura parámetros nombrados (clave=valor).
🧠 Juntos permiten crear funciones universales y adaptables.
🔧 3. Función flexible con kwargs
💡 Objetivo:
Tener una única función que:
- Seleccione el cliente de API correcto.
- Mezcle una configuración base con parámetros dinámicos.
- Ejecute la llamada final.
📄 Ejemplo:
def fetch_news(api_name, *args, **keywords):
base_config = {
"timeout": ..., # por defecto
"retries": ..., # por defecto
}
config = {**base_config, **keywords}
api_clients = {
"newsAPI": news_api_client,
"Guardian": guardian_client,
}
client = api_clients[api_name]
return client(*args, **config)
⚙️ 4. Cómo funciona el doble asterisco (**)
✨ Uso clave:
Desempaquetar o fusionar diccionarios.
🧩 Ejemplos:
- {**base_config, **keywords} → mezcla configuraciones.
- client(*args, **config) → pasa argumentos nombrados al ejecutar la función.
✅ Resultado:
Código más limpio, sin sobrescribir manualmente parámetros.
🧭 5. Orden correcto de parámetros
🧱 Regla de oro en Python:
1️⃣ Parámetros obligatorios
2️⃣ *args → posicionales variables
3️⃣ **kwargs → nombrados y dinámicos
🧩 Ejemplo:
def fetch_news(api_name, *args, **kwargs):
...
🔍 6. Selección dinámica del cliente
🔧 Cómo funciona:
Se define un diccionario con los clientes de API:
api_clients = {
"newsAPI": news_api_client,
"Guardian": guardian_client,
}
El parámetro api_name selecciona el cliente correcto:
client = api_clients[api_name]
💡 Permite conectar múltiples servicios con una sola función.