Question

J'utilise argparse en python pour analyser les arguments en ligne de commande:

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

Maintenant, je veux faire quelques calculs avec a, b et c. Cependant, je trouve ennuyeux d'écrire args.a + args.b + args.c tout le temps.

Par conséquent, je suis extraire ces variables:

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

Ce que je peux écrire a + b + c.

Y at-il une façon plus élégante de le faire?

Extraction manuelle devient très fastidieuse et sujette aux erreurs lors de l'ajout de nombreux arguments.

Était-ce utile?

La solution

Si vous voulez que globals, vous pouvez faire:

globals().update(vars(args))

Si vous êtes dans une fonction et voulez en tant que variables locales de cette fonction, vous pouvez le faire en Python 2.x comme suit:

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.

Cette astuce ne fonctionne pas en Python 3, où exec n'est pas une déclaration, ni probablement dans d'autres variantes Python tels que Jython ou IronPython.

Dans l'ensemble, cependant, je recommanderais simplement utiliser un nom plus court pour l'objet args, ou utilisez votre presse-papiers. : -)

Autres conseils

Vous pouvez ajouter des choses à la portée locale en appelant locals(). Il retourne un dictionnaire qui représente la portée actuellement disponible. Vous pouvez attribuer des valeurs à lui aussi bien -. locals()['a'] = 12 se traduira par a étant dans la portée locale avec une valeur de 12

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top