2012-05-07 3 views
2

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

Некоторые из параметров могут быть логически объединены в множествах, например, могут быть наборы параметров, соответствующих данному инструменту. Моделирование должно выполняться путем замены и набора различных параметров.

Я хотел бы сохранить параметры в отдельном файле, чтобы их можно было легко изменить.

Мой вопрос заключается в следующем: как мне «импортировать» параметры в пространство имен модулей вычислений таким образом, чтобы я мог указать, какие наборы используются?

Прямо сейчас, я использую то, что кажется взломом. В модуле параметров я храню значения в словарях. Например,

----- start params_module ----- 
instrument1 = dict(param1=1.0, param2=2.0, ...) 
instrument2 = dict(param1=3.0, param2=4.0, ...) 
instrument3 = dict(param1=5.0, param2=6.0, ...) 
misc_params = dict(param10 = 10, param11=20, ...) 
... 
----- end params_module ----- 

я затем импортировать словарь интерес в пространстве имен calculation_module и добавить его в словарь глобалам:

--- start calculation_module ----- 
from params_module import instrument1, misc_params 
globals().update(instrument1) 
globals().update(misc_params) 
... 
many equations that make use of param1, param2, etc. 
... 
--- end calculation_module ----- 

есть более Pythonic способ сделать это?

спасибо.

-cytochrome

ответ

3

Вы метод хорошо, но если вы хотите изменить параметры в calculation_module, вам необходимо изменить код calculation_module.py. Вместо этого я буду использовать execfile.

from params_module import instrument1, misc_params 
env = {} 
env.update(instrument1) 
env.update(misc_params) 

execfile("calculation_module.py", env) 

#get your result form env 
Смежные вопросы