将大量变量导入命名空间

时间:2012-05-07 12:55:20

标签: python import namespaces

我正在重构一个大型的科学计划。该应用程序的主要代码包含使用数百个参数的数十个方程式。由于此计算代码已经过广泛测试,我不想更改它。

一些参数可以在逻辑上集中在一起,例如,可以存在与给定仪器相对应的参数组。通过交换不同的参数集来运行模拟。

我想将参数保存在单独的文件中,以便可以轻松更改。

我的问题是:如何将参数“导入”到计算模块命名空间中,以便我可以指定使用哪些集合?

现在,我正在使用看似黑客的东西。在参数模块中,我在字典中保存值。例如,

----- 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 -----

然后我在calculate_module命名空间中导入感兴趣的字典并将其添加到globals字典中:

--- 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

1 个答案:

答案 0 :(得分:3)

您的方法没问题,但是如果您想更改calculate_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