我有大约20个不同的模块,它们都包含一个具有相同名称的变量。我试图导入这些变量,而不必明确键入每个导入。所以不要这样做:
import a,b,c,d,e
a1 = a.var
b1 = b.var
c1 = c.var
d1 = d.var
e1 = e.var
我想有一种动态创建它们的循环。类似的东西:
module_list = [a,b,c,d,e]
for module in module_list:
create module.var
答案可能在字典的某处,但我不太确定在这里如何使用它们。
答案 0 :(得分:2)
如果您有文件a.py
:
var = 1
和文件b.py
:
var = 2
你可以这样做:
from importlib import import_module
module_list = ['a', 'b']
variables = {}
for mod_name in module_list:
mod = import_module(mod_name)
variables[mod_name] = getattr(mod, 'var')
>>> variables
{'a': 1, 'b': 2}
>>> variables['a']
1
importlib.import_module允许使用字符串作为名称导入模块。您可以使用getattr()再次使用字符串作为其名称来检索属性,例如:
>>> import sys
>>> sys.version == getattr(sys, 'version')
True
如果你是一个单行,你可以在一行中完成:
variables = {mod_name: getattr(import_module(mod_name), 'var') for mod_name in module_list}