我正在使用以下程序生成乳胶文档的图片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 genimgFirst
并import 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()
您可以递归地为导入的模块调用代码。就像是
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] 删除。
我来说两句