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

2024-05-29 10:11:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用“程序化”的方式来定义全局变量。我想做的是:

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

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

现在,上面的exec解决方案可以工作了。但我对此有点不安,因为恐怕exec不是实现设置模块全局的目标的最干净的方法。


Tags: 模块infor定义方式etcitemsmass
3条回答

你说得对,exec通常是个坏主意,在这种情况下当然不需要。

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

基本常数.py:

import fundamentalconstants

fundamentalconstants.life_meaning= 42

for line in open('constants.dat'):
    name, _, value= line.partition(':')
    setattr(fundamentalconstants, 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)

您可以在globals()返回的字典中设置globals:

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

相关问题 更多 >

    热门问题