Импорт переменных из объекта пространства имен в 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') 
  • python argparse задает поведение, если аргументы не предоставлены
  • Как сделать использование печати argparse, когда код не указан
  • python argparse - либо оба необязательных аргумента, либо ни один
  • Проверьте, установлен ли дополнительный аргумент argparse.
  • Повторить подпараметр Python argparser
  • Поддерживает ли argparse (python) взаимоисключающие группы аргументов?
  • Вызов функций с помощью argparse
  • Python argparse: nargs + или * в зависимости от предыдущего аргумента
  • Argparse: проверьте, не были ли приняты какие-либо аргументы
  • Пример использования программы печати с помощью модуля argparse
  • Отключить / удалить аргумент в argparse
  •  
    Interesting Posts for Van-Lav

    Правила на основе открытого исходного кода Двигатели на Java или Python

    Попытка вернуть числа в списке

    Использование ByteBuffer в Java для репликации struct.pack Python

    Ansible: Доступ к хостам / группам vars из пользовательского модуля

    Msgstr "Нет установленного приложения с меткой 'admin' ', выполняющей миграцию Django. Приложение установлено правильно

    imagemagick wand сохраняет pdf-страницы в качестве изображений

    В Python, как мне преобразовать список ints и строк в Unicode?

    Python Pandas Как выбрать строки с одним или несколькими нулями из DataFrame без явного указания столбцов?

    Как указать один необязательный аргумент несколько раз в docopt

    В matplotlib, как вы рисуете тики оси R-стиля, указывающие наружу от осей?

    Расстояние Жаккар – объединение и пересечение списков

    Как распечатать с помощью inline if?

    не удается установить lxml на Ubuntu 12.04

    Изменение предпочтительной кодировки для командной строки Windows7

    Как остановить Python unittest от печати тестовой docstring?

    Python - лучший язык программирования в мире.