如何以编程方式设置全局(模块)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并不是实现设置模块全局的最简单的方法。

3 Solutions collect form web for “如何以编程方式设置全局(模块)variables?”

你可以在由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) 
  • 如何修改bash中的函数内的全局variables?
  • 使用:=在data.table中,按组分组多个列
  • 在JavaScript中声明多个variables
  • 如何在Python中对数组中的唯一值进行计数?
  • 在ArrayBlockingQueue中,为什么要将最终成员字段复制到本地最终variables?
  • 将variables分配给{%include%}标签Django中的子模板
  • 整数总是初始化为0?
  • PHP传递variables来包含
  • 路由请求时,HttpContext.Current.Session为空
  • 如何在Android中声明全局variables?
  • 我如何获得registry项的值,只有使用PowerShell的值