Вопрос

Я использую 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top