2012-05-07 10 views
2

私は大きな科学的プログラムをリファクタリングしています。アプリケーションのメインコードは、数百のパラメータを使用する数十の方程式で構成されています。この計算コードは広範にテストされているため、変更したくありません。パラメータの一部は、論理的セットでひとまとめにされてもよい名前空間に多数の変数をインポートする

、例えば、所定の器具に対応するパラメータの組が存在してもよいです。シミュレーションは、異なるパラメータセットを入れ替えて実行する必要があります。

パラメータを別のファイルに保存して、簡単に変更できるようにしたいと考えています。

私の質問は次のとおりです。使用するセットを指定できるように、パラメータを計算モジュールの名前空間にインポートするにはどうすればよいですか?

現在、私はハックのようなものを使用しています。 parametersモジュールでは、辞書に値を保持します。例えば、

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

は、これを行うために、よりPython的な方法はありますか?

ありがとうございます。

-cytochrome

答えて

3

あなたの方法はOKですが、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