将不同文件中的列表合并为超级列表

时间:2015-09-13 03:57:45

标签: python django

我在模块中有许多不同的python文件。每个文件都有一个自己的列表,例如my_list = []

module
 __init__.py
 A.py # my_list = [1]
 B.py # my_list = [2]
 C.py # my_list = [3]
 D.py # my_list = [4]
 ..

我想以编程方式合并所有文件中的列表并创建一个super_list [1,2,3,4]。

这是我尝试过的。

import importlib
module = importlib.import_module('module')
super_list = []
for file in ['A', 'B', 'C', 'D']:
  super_list += getattr(module, file).my_list

这似乎有效。我遇到的问题是我需要在module.__init__.py中添加导入A,B,C,D。

有没有更好的方法在python中做同样的事情。

1 个答案:

答案 0 :(得分:0)

我会尝试在module.__init__中有__all__中的模块名称列表,这是允许 from module import *和裸代码的标准行为导入和扩展super_list,例如:

# module.__init__
import importlib
__all__ = ['A', 'B', 'C', 'D'] # List of what to import for from module import *
super_list = []
for sub in __all__:
    try:
       m = importlib.import_module(sub)
       super_list.extend(getattr(m, 'my_list'))
    except ImportError:
       pass # Ignore any import errors
__all__.append('super_list') # Add to the import * list

如果您不希望允许from module import *,请使用__all__以外的名称作为模块列表。

这会将模块特定行为置于所属的模块中,而不是在任何导入它的代码中。您可以使用glob填充__all__列表,但我不建议将其作为良好做法。

以上是未经测试的代码