Frage

Ich verwende ArgParse in Python, um Befehlszeilenargumente zu analysieren:

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

Jetzt möchte ich einige Berechnungen mit machen a, b, und c. Ich finde es jedoch mühsam, zu schreiben args.a + args.b + args.c die ganze Zeit.

Daher extrahiere ich diese Variablen:

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

So dass ich schreiben kann a + b + c.

Gibt es eine elegantere Art, das zu tun?

Die manuelle Extraktion wird sehr mühsam und fehleranfällig, wenn viele Argumente hinzugefügt werden.

War es hilfreich?

Lösung

Wenn Sie sie als Globale wollen, können Sie dies tun:

globals().update(vars(args))

Wenn Sie sich in einer Funktion befinden und sie als lokale Variablen dieser Funktion haben möchten, können Sie dies in Python 2.x wie folgt tun:

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.

Dieser Trick funktioniert nicht in Python 3, wo exec ist weder eine Aussage noch wahrscheinlich in anderen Python -Varianten wie Jython oder Ironpython.

Insgesamt würde ich jedoch empfehlen, nur einen kürzeren Namen für die zu verwenden args Objekt oder verwenden Sie Ihre Zwischenablage. :-)

Andere Tipps

Sie können den lokalen Umfang anrufen, indem Sie anrufen locals(). Es gibt ein Wörterbuch zurück, das den aktuell verfügbaren Bereich darstellt. Sie können ihm auch Werte zuweisen - locals()['a'] = 12 wird darin enden, dass a mit einem Wert von 12 im lokalen Bereich sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top