将python模块导入dict(在execfile()中用作全局变量)?

时间:2011-12-27 22:13:01

标签: python python-module

我使用Python execfile()函数作为处理配置文件的一种简单但灵活的方式 - 基本上,这个想法是:

# Evaluate the 'filename' file into the dictionary 'foo'.
foo = {}
execfile(filename, foo)

# Process all 'Bar' items in the dictionary.
for item in foo:
  if isinstance(item, Bar):
    # process item

这要求我的配置文件可以访问Bar类的定义。在这个简单的例子中,这是微不足道的;我们可以定义foo = {'Bar' : Bar}而不是空字典。但是,在实际示例中,我有一个我想要加载的整个模块。一个明显的语法是:

foo = {}
eval('from BarModule import *', foo)
execfile(filename, foo)

但是,我已经在我的顶级文件中导入了BarModule,因此我似乎应该能够直接将foo定义为{{1}定义的事物集合},无需经历BarModuleeval链。

有没有一种简单的惯用方法呢?

3 个答案:

答案 0 :(得分:8)

也许您可以使用模块定义的__dict__

>>> import os
>>> str = 'getcwd()'
>>> eval(str,os.__dict__)

答案 1 :(得分:6)

使用内置vars()函数将对象(例如模块)的属性作为字典获取。

答案 2 :(得分:1)

典型的解决方案是使用getattr:

>>> s = 'getcwd'
>>> getattr(os, s)()