Python: extraer variables fuera del espacio de nombres
-
25-10-2019 - |
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.
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.