from module import a, b, c
foo(a)
foo(b)
foo(c)
有没有一种方法可以避免必须foo(x)
为每个导入的对象调用?
一些上下文:a,b,c是网页类,而foo是route()函数,该函数为每个网页创建路由。
更新:随着应用程序的增长,主模块中的导入类列表将越来越多。我仅以a,b和c为例。我正在寻找类似的东西import a, b, c to classes_list
,然后可以遍历classes_list
而不是在每个导入的类上调用foo。
假设没有其他导入,则可以遍历globals()。items()以收集所有类。如果总体导入中还有其他类,则可能需要进一步过滤。
import inspect
from pandas import DataFrame, Grouper, ExcelFile
imps = globals().items()
filtered_imps = [x[1] for x in imps if inspect.isclass(x[1])]
print(filtered_imps)
产生:
[<class '_frozen_importlib.BuiltinImporter'>, <class 'pandas.core.frame.DataFrame'>, <class 'pandas.core.groupby.grouper.Grouper'>, <class 'pandas.io.excel._base.ExcelFile'>]
然后,你可以foo()
根据需要循环或作为理解的一部分来遍历列表,也许使用atry ... except
来处理途中的异常。
在try循环中使用try ..可能更安全,而不是在列表中运行该函数。