Python: извлечь переменные из пространства имен
-
25-10-2019 - |
Вопрос
Я использую Argparse в Python для анализа аргументов командной линии:
parser = ArgumentParser()
parser.add_argument("--a")
parser.add_argument("--b")
parser.add_argument("--c")
args = parser.parse_args()
Теперь я хочу сделать некоторые расчеты с a
, b
, а также c
. Анкет Тем не менее, я нахожу утомительным писать args.a + args.b + args.c
все время.
Поэтому я извлекаю эти переменные:
a, b, c = [args.a, args.b, args.c]
Так что я могу написать a + b + c
.
Есть ли более элегантный способ сделать это?
Ручное извлечение становится очень утомительным, а при добавлении множества аргументов.
Решение
Если вы хотите их как глобальные, вы можете сделать:
globals().update(vars(args))
Если вы находитесь в функции и хотите их в качестве локальных переменных этой функции, вы можете сделать это в Python 2.x следующим образом:
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.
Этот трюк не работает в Python 3, где exec
не является утверждением, ни вероятно, в других вариантах Python, таких как Jython или Ironpython.
В целом, однако, я бы порекомендовал использовать более короткое имя для args
объект или используйте буфер обмена. :-)
Другие советы
Вы можете добавить вещи в локальную сферу, позвонив locals()
. Анкет Он возвращает словарь, который представляет доступную в настоящее время область применения. Вы также можете присвоить ему значения - locals()['a'] = 12
приведет к a
Находясь в локальном масштабе со значением 12.