Python: Extrahieren Sie Variablen aus dem Namespace
-
25-10-2019 - |
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.
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.