2012-05-07 2 views
2

Je suis en train de refactoriser un grand programme scientifique. Le code principal de l'application est constitué de dizaines d'équations utilisant des centaines de paramètres. Parce que ce code de calcul a été testé intensivement, je ne veux pas le changer.Importer un grand nombre de variables dans un espace de noms

Certains des paramètres peuvent être logiquement regroupés en ensembles, par exemple, il peut y avoir des ensembles de paramètres correspondant à un instrument donné. Les simulations doivent être exécutées en échangeant différents ensembles de paramètres.

Je souhaite conserver les paramètres dans un fichier séparé afin qu'ils puissent être facilement modifiés.

Ma question est la suivante: Comment puis-je 'importer' les paramètres dans l'espace de nom du module de calcul d'une manière qui me permettra de spécifier quels ensembles sont utilisés?

En ce moment, j'utilise ce qui semble être un hack. Dans le module paramètres, je détiens des valeurs dans les dictionnaires. Par exemple,

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

je puis importer le dictionnaire d'intérêt dans l'espace de noms calculation_module et l'ajouter dans le dictionnaire 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 ----- 

est-il un moyen plus Pythonic de le faire?

Merci.

-cytochrome

Répondre

3

méthode est ok, mais si vous voulez changer les paramètres calculation_module, vous devez modifier le code calculation_module.py. Je vais utiliser execfile à la place.

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