Pregunta

Estoy usando Argparse en Python para analizar argumentos de línea de comandos:

parser = ArgumentParser()
parser.add_argument("--a")
parser.add_argument("--b")
parser.add_argument("--c")
args = parser.parse_args()

Ahora quiero hacer algunos cálculos con a, b, y c. Sin embargo, me resulta agotador escribir args.a + args.b + args.c todo el tiempo.

Por lo tanto, estoy extrayendo esas variables:

a, b, c = [args.a, args.b, args.c]

De tal manera que pueda escribir a + b + c.

¿Hay una forma más elegante de hacer eso?

La extracción manual se vuelve muy tediosa y propensa a errores al agregar muchos argumentos.

¿Fue útil?

Solución

Si los quieres como globales, puedes hacer:

globals().update(vars(args))

Si está en una función y las desea como variables locales de esa función, puede hacerlo en Python 2.x de la siguiente manera:

def foo(args):
   locals().update(vars(args))       
   print a, b, c
   return
   exec ""  # forces Python to use a dict for all local vars
            # does not need to ever be executed!  but assigning
            # to locals() won't work otherwise.

Este truco no funciona en Python 3, donde exec no es una declaración, ni probable en otras variantes de Python como Jython o Ironpython.

En general, sin embargo, recomendaría usar un nombre más corto para el args Objeto, o use su portapapeles. :-)

Otros consejos

Puede agregar cosas al alcance local llamando locals(). Devuelve un diccionario que representa el alcance disponible actualmente. También puede asignar valores - locals()['a'] = 12 resultará en a estar en el alcance local con un valor de 12.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top