Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

447
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!