Импорт переменных из объекта пространства имен в Python

Скажем, у меня есть args пространства имен, которые я получаю от вызова parser.parse_args() , который анализирует аргументы командной строки.

Как импортировать все переменные из этого пространства имен в мое текущее пространство имен?

например

 parser.add_argument('-p', '--some_parameter', default=1) args = parser.parse_args() # ... code to load all variables defined in the namespace args ... print some_parameter 

Я мог бы конечно сделать:

 some_parameter = args.some_parameter 

но если у меня есть большое количество параметров, мне понадобится одна такая строка для каждого параметра.

Есть ли другой способ импортировать переменные из пространства имен без необходимости проходить через них один за другим?

PS : from args import * не работает.

PS2 : Я знаю, что это плохая практика, но это может помочь в некоторых случаях с короткими случаями, например, при очень быстром программировании кода и тестах.

2 Solutions collect form web for “Импорт переменных из объекта пространства имен в Python”

Обновите локальное пространство имен с помощью функции vars() :

 globals().update(vars(args)) 

Это, как правило, не такая уж большая идея; вместо этого оставляйте эти атрибуты в пространстве имен.

Вы можете создать больше проблем, чем вы решили с помощью этого подхода, особенно если вы случайно настроили аргументы с именем dest которое затеняет встроенный или локальный объект, о котором вы заботитесь, например, list или print или что-то еще. Удачи, охотясь за этой ошибкой!

Тим Петерс уже заявил об этом в своем «Дзэн Питона»:

Пространства имен – одна хорошая идея – давайте сделаем больше!

Вероятно, это наихудшая идея: поскольку вы можете передать произвольный объект parse_args() , передайте модуль __builtins__ , чтобы все атрибуты можно было искать как локальные переменные.

 p = argparse.ArgumentParser() p.add_argument("--foo") p.parse_args( "--foo bar".split(), __builtins__) print foo 

Это даже «работает» для параметров, адреса которых недействительны. Идентификаторы Python:

 # To use the example given by Francis Avila in his comment on Martijn Pieters' answer getattr(__builtins__, '2my-param') 
  • Передача аргументов (для argparse) с помощью unittest обнаружить
  • Argparse - одновременный доступ к нескольким аргументам
  • argparse с требуемыми подкомандами
  • как сделать аргумент необязательным в python argparse
  • Передача аргументов в os.system
  • Требуется аргумент call_command
  • TypeError: принуждение к Unicode: нужна строка или буфер, список найден
  • Pip не устанавливает последнюю доступную версию из pypi (argparse в этом случае)
  • Python - лучший язык программирования в мире.