CodeForge

Python de Cero a Experto / Funciones

Parámetros flexibles: defaults, *args, **kwargs

Teoría22 min20 XP

Las funciones de Python son muy flexibles con cómo reciben datos. Puedes dar valores POR DEFECTO (para parámetros opcionales), pasar argumentos POR NOMBRE (para que la llamada se lea clara), y recibir un número VARIABLE de argumentos con *args y **kwargs. Estas herramientas hacen que una misma función sirva para muchos casos sin duplicarla. Hoy las dominas.

La receta con ingredientes opcionales

Valores por defecto y argumentos por nombre

Un parámetro con =valor es OPCIONAL: si no lo pasas, usa el valor por defecto (tasa=0.19). Los parámetros con defecto van SIEMPRE después de los obligatorios. Y puedes pasar argumentos POR NOMBRE (categoria="comida"): esto hace la llamada más legible (queda claro qué es cada valor) y te libera del orden (registrar(valor=2800, nombre="Bus") funciona). Los argumentos por posición van primero; los de nombre después.

*args: número variable de posicionales

**kwargs: número variable de nombrados

¿Qué recogen *args y **kwargs, y en qué estructura cada uno?

Mini-reto

Haz funciones flexibles para Mi Bolsillo: 1) con_impuesto(valor, tasa=0.19) con tasa opcional; 2) sumar_gastos(*valores) que sume cuantos gastos le pases usando *args; 3) crear_gasto(**datos) que devuelva un diccionario con lo que reciba por nombre; 4) llámalas de varias formas (con y sin los opcionales, con distintos números de argumentos). Comprueba que sumar_gastos() sin argumentos da 0.

Qué sigue

Ya haces funciones flexibles. La próxima lección trae las funciones LAMBDA (funciones anónimas de una línea) y la idea de que en Python las funciones son VALORES que puedes pasar a otras funciones —la base de map, filter y sorted(key=...)—. Un salto hacia el estilo funcional.