如何从同目录所有模块批量导入并调用同名函数myfunc?
当然有办法!这里有两种实用的方案帮你摆脱重复导入的繁琐操作:
方案一:创建Python包(推荐,更规范易维护)
这种方式适合长期维护的项目,结构更清晰:
- 新建一个文件夹(比如叫
my_func_scripts),把script2.py、script3.py、script4.py都移进去 - 在这个文件夹里创建一个
__init__.py文件,写入以下内容:
# 给每个myfunc起别名避免覆盖,同时收集到列表里方便批量调用 from script2 import myfunc as myfunc2 from script3 import myfunc as myfunc3 from script4 import myfunc as myfunc4 all_myfuncs = [myfunc2, myfunc3, myfunc4]
- 回到
script1.py里,就可以这样轻松调用了:
# 批量调用所有myfunc from my_func_scripts import all_myfuncs for func in all_myfuncs: func() # 或者单独调用指定的函数 from my_func_scripts import myfunc3 myfunc3()
方案二:动态导入(适合快速实现,无需调整目录结构)
如果不想改动现有文件结构,可以用Python的importlib和os模块动态遍历并导入:
import os import importlib # 筛选出当前目录下符合命名规则的脚本(排除自身) target_scripts = [ f for f in os.listdir('.') if f.endswith('.py') and f != 'script1.py' and f.startswith('script') # 匹配script2/3/4这类文件名 ] for script in target_scripts: # 去掉.py后缀得到模块名 module_name = script[:-3] # 动态导入模块 module = importlib.import_module(module_name) # 检查模块里是否有myfunc,避免报错 if hasattr(module, 'myfunc'): module.myfunc()
注意点:
- 如果后续新增类似
script5.py这样的文件,只要文件名符合scriptX.py的规则,动态导入的代码会自动识别并调用它的myfunc - 动态导入的可读性稍弱,如果你需要明确知道调用了哪些函数,方案一更合适
内容的提问来源于stack exchange,提问作者Craver2000
相关产品推荐
相关产品推荐

