Python从列表创建动态全局变量

时间:2013-04-11 11:09:32

标签: python dynamic global-variables

我正在尝试制作通用配置,从而配置解析器。有两个配置文件说A和B.我想根据硬编码列表解析部分并从中创建全局值。

以下是一个例子:

在配置文件中:

[section]
var1 = value1
var2 = value2

在全球范围内:

some_global_list = [ ["var1","var2"], ["var3","var4"] ] 

在功能中通过ConfigParser解压缩此值:

configparser = ConfigParser.RawConfigParser()
configparser.read(some_config_filename)

for variables in some_global_list:
    globals()[section]=dict()
    for element in configparser.items(section):
        globals()[section].update({element[0]:element[1]})

这很好用...... 然而。全局()的范围似乎仅限于功能,这显然不是我的意图。我只能在该函数中访问变量。

有人可以分享更简单的想法吗? 我知道我可能会将代码移到main而不用担心,但我认为这不是一个好主意。 我还想过制作一些发生器(对不起伪码):

在全球范围内:

for x in some_global_list:
    globals()[x] = x

还尝试将此功能添加到功能:

for x in some_global_list[0]:
    global x

但无处可去。

编辑:

经过以下讨论,这里是:

问题解决了这样:

  1. 将整个配置从主脚本移除到模块
  2. 从模块
  3. 导入(来自模块导入某些功能)配置
  4. 删除了globals()实际上并不需要它们,因为函数有点像这样改变了:
  5. 功能:

    def somefunction:
    #(...)
    
    configparser = ConfigParser.RawConfigParser()
    configparser.read(some_config_filename)
    
    temp_list=[]
    for variables in some_global_list:
        tmp=dict()
        for element in configparser.items(section):
        tmp.update({element[0]:element[1]})
    temp_list.append (tmp)
    return temp_list #this is pack for one file.   
    

    现在在主脚本

    tmp=[]
    for i,conf_file in enumerate([args.conf1,args.conf2,args.conf3]):
        if conf_file:
            try:
                tmp.append([function(params...)])
            except:
                #handling here
            #but since i needed those config names as global variables 
        for j,variable_set in enumerate(known_variable_names[i]):
            globals()[variable_set] = tmp[i][j]
    

    如此不幸的黑客主义者。但似乎工作。谢谢你的帮助。

    我接受(如果可能的话)以下答案,因为它给了我一个好主意:)

1 个答案:

答案 0 :(得分:0)

解决此问题的一种简单方法是在__init__.py中的应用程序包中,您可以执行类似以下操作:

app_config = read_config()

def read_config():
    configparser = ConfigParser.RawConfigParser()
    configparser.read(some_config_filename)
    return configparser.as_dict() #An imaginery method which returns the vals as dict.

可以将“app_config”变量导入应用程序中的任何其他模块。