Skip to main content
 首页 » 编程设计

python之如何自动调用导入模块的函数

2025年05月04日18yjmyzz

我正在使用以下程序 genimg.py 生成我的 latex 文档的图片:

#!/usr/bin/env python3 
 
def figCircle(): 
    print('generate circle picture') 
def figSquare(): 
    print('generate square picture') 
 
def main(): 
    for key, value in globals().items(): 
        if callable(value) and key.startswith('fig'): 
            value() 
 
if __name__== "__main__": 
    main() 

现在,由于图像越来越多,我想将 genimg.py 拆分为更多文件,比如 genimgFirst.py 和 genimgSecond。 py 和 genimg.py 应该遍历以 genimg 开头的模块并执行以 fig 开头的所有函数。假设我在新修改的 genimg.py 的开头添加了 import genimgFirst 和 import genimgSecond。

这可能吗(无需革命,只需复制和粘贴我的 fig* 函数)?

编辑 这是合并@bluenote 和@inspectorG4dget 的两个答案后的代码:

#!/usr/bin/env python3 
import glob 
 
def main(): 
    for fname in glob.glob("genimg*.py"):  # get all the relevant files 
        if fname == "genimg.py": 
            continue 
        print('>>>> {}'.format(fname)) 
        mod = fname.rsplit('.',1)[0] 
        mod = __import__(mod)  # import the module 
        for k,v in mod.__dict__.items(): 
            if callable(v) and k.startswith('fig'): v()  # if a module attribute is a function, call it 
 
if __name__== "__main__": 
    main() 

请您参考如下方法:

您可以为导入的模块递归调用您的代码。有点像

import types 
 
def call_functions(module_dict): 
   for key, value in module_dict.items(): 
        if callable(value) and key.startswith('fig'): 
            value() 
        elif isinstance(value, types.ModuleType): 
            call_functions(value.__dict__) 
 
if __name__=='__main__': 
    call_functions(globals())