Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

448
Vistas
¿Por qué usar ** kwargs en python? ¿Cuáles son algunas de las ventajas del mundo real sobre el uso de argumentos con nombre?

Vengo de una formación en lenguajes estáticos. ¿Alguien puede explicar (idealmente a través de un ejemplo) las ventajas del mundo real de usar **kwargs sobre argumentos con nombre ?

Para mí, solo parece hacer que la llamada a la función sea más ambigua. Gracias.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Es posible que desee aceptar argumentos con nombres casi arbitrarios por una serie de razones, y eso es lo que **kwle permite hacer el formulario.

La razón más común es pasar los argumentos directamente a alguna otra función que esté envolviendo (los decoradores son un caso de esto, ¡pero LEJOS de ser el único!) -- en este caso, **kwafloja el acoplamiento entre envoltorio y envoltorio, como el envoltorio no tiene que saber o preocuparse por todos los argumentos del envoltorio. Aquí hay otra razón completamente diferente:

d = dict(a=1, b=2, c=3, d=4)

si todos los nombres tuvieran que ser conocidos de antemano, entonces obviamente este enfoque simplemente no podría existir, ¿verdad? Y, por cierto, cuando corresponda, prefiero esta forma de hacer un dict cuyas claves son cadenas literales para:

d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

simplemente porque este último tiene bastante puntuación y, por lo tanto, es menos legible.

Cuando ninguna de las excelentes razones para aceptar **kwargsse aplica, entonces no lo aceptes: es así de simple. IOW, si no hay una buena razón para permitir que la persona que llama pase argumentos adicionales con nombres arbitrarios, no permita que eso suceda, simplemente evite poner un **kwformulario al final de la firma de la función en la defdeclaración.

En cuanto al uso **kw en una llamada, eso le permite reunir el conjunto exacto de argumentos con nombre que debe pasar, cada uno con los valores correspondientes, en un dict, independientemente de un único punto de llamada, luego use ese dict en el único punto de llamada. Comparar:

if x: kw['x'] = x
if y: kw['y'] = y
f(**kw)

a:

if x:
  if y:
    f(x=x, y=y)
  else:
    f(x=x)
else:
  if y:
    f(y=y)
  else:
    f()

Incluso con solo dos posibilidades (¡y del tipo más simple!), la falta de **kwya hace que la segunda opción sea absolutamente insostenible e intolerable; imagínense cómo se desarrolla cuando hay media docena de posibilidades, posiblemente en una interacción ligeramente más rica. ¡ sin **kw, la vida sería un infierno absoluto bajo tales circunstancias!

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda