有没有办法让定义或类中的每个变量自动变为全局变量?

时间:2010-10-06 16:13:24

标签: python

我在一些定义和类中使用了大量变量(主要是因为我希望能够使用pydev的代码折叠功能)。我可以在定义或类上使用任何构造函数来使其变量自动被视为全局变量吗?


这是我在遵循评论中提供的一些建议后所做的一个例子:

自:

img_globe       = os.path.join(set_img_dir, 'img_globe.png')
img_help        = os.path.join(set_img_dir, 'img_help.png')
img_exit        = os.path.join(set_img_dir, 'img_exit.png')
img_open        = os.path.join(set_img_dir, 'img_open.png')
img_tutorial    = os.path.join(set_img_dir, 'img_tutorial.png')
img_save        = os.path.join(set_img_dir, 'img_save.png')
img_site        = os.path.join(set_img_dir, 'img_site.png')

...(长,长名单)

要:

varies = {}
dirList=os.listdir(set_img_dir)
for fname in dirList: 
    varies[fname.split(".")[0]] = os.path.join(set_img_dir, fname)

1 个答案:

答案 0 :(得分:0)

虽然您不应该这样做,并且您正在寻找的解决方案并不像您想象的那么简单,但这是一个非常简单的示例,说明如何从函数中获取局部变量并使它们成为全局:

def make_locals_globals():
    """This is just bad"""
    foo = 1
    bar = 2

    locals_dict = locals()
    globals_dict = globals()

    print 'Locals:', locals_dict

    for varname, varval in locals_dict.items():
        print 'Setting global: %s=%s' % (varname, varval)
        globals_dict[varname] = varval

if __name__ == '__main__':
    make_locals_globals()

    print '\nGlobals:'
    print 'foo=', foo
    print 'bar=', bar