如何自动调用导入模块的功能?

亚伦·伦兹(Aaron Lenz)

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

#!/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并且thegenimg.py应该遍历以开头的模块genimg并执行以开头的所有功能fig假设我添加,import genimgFirstimport genimgSecond在新修改的开头genimg.py

这有可能吗(不做革命,就是复制和粘贴我的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()
blue_note

您可以递归地为导入的模块调用代码。就像是

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())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章