Estratto variabili su namespace: Python
-
25-10-2019 - |
Domanda
Sto usando argparse in Python per argomenti della riga di comando di parsing:
parser = ArgumentParser()
parser.add_argument("--a")
parser.add_argument("--b")
parser.add_argument("--c")
args = parser.parse_args()
Ora voglio fare alcuni calcoli con a
, b
e c
. Tuttavia, lo trovo noioso args.a + args.b + args.c
scrivere tutto il tempo.
Quindi, sto estraendo quelle variabili:
a, b, c = [args.a, args.b, args.c]
Tale che posso scrivere a + b + c
.
C'è un modo più elegante di fare questo?
estrazione manuale diventa molto noioso e soggetto ad errori quando si aggiunge più argomenti.
Soluzione
Se li volete come globali, si può fare:
globals().update(vars(args))
Se siete in una funzione e li vuole come variabili locali di tale funzione, si può fare questo in Python 2.x come segue:
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.
Questo trucco non funziona in Python 3, dove exec
non è una dichiarazione, né probabilmente in altre varianti, come Python Jython o IronPython.
Nel complesso, però, mi sento di raccomandare semplicemente utilizzando un nome più breve per l'oggetto args
, o utilizzare il clipboard. : -)
Altri suggerimenti
È possibile aggiungere le cose al ambito locale chiamando locals()
. Esso restituisce un dizionario che rappresenta l'ambito attualmente disponibili. È possibile assegnare valori ad esso pure -. locals()['a'] = 12
si tradurrà in a
essere in ambito locale con un valore di 12