如何以编程方式设置全局(模块)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)