如何以编程方式设置全局(模块)variables?

我想以“编程”的方式来定义全局variables。 类似于我想要做的事情是:

definitions = {'a': 1, 'b': 2, 'c': 123.4} for definition in definitions.items(): exec("%s = %r" % definition) # a = 1, etc. 

具体来说,我想创build一个模块的fundamentalconstants ,它包含的variables可以作为fundamentalconstants.electron_mass 。电子质量等等来访问,其中所有的值都是通过parsing文件来获得的(因此需要以“编程”的方式进行赋值)。

现在,上面的exec解决scheme将工作。 但是我有点不安,因为我担心exec并不是实现设置模块全局的最简单的方法。

你可以在由globals()返回的字典中设置全局variables:

 definitions = {'a': 1, 'b': 2, 'c': 123.4} for name, value in definitions.items(): globals()[name] = value 

这是一个更好的方法来做到这一点:

 import sys definitions = {'a': 1, 'b': 2, 'c': 123.4} module = sys.modules[__name__] for name, value in definitions.iteritems(): setattr(module, name, value) 

你是对的, exec通常是一个坏主意,在这种情况下肯定不需要。

奈德的回答很好。 如果你是一个模块的另一种可能的方式是导入自己:

fundamentalconstants.py:

 import fundamentalconstants fundamentalconstants.life_meaning= 42 for line in open('constants.dat'): name, _, value= line.partition(':') setattr(fundamentalconstants, name, value)