You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从同目录所有模块批量导入并调用同名函数myfunc?

当然有办法!这里有两种实用的方案帮你摆脱重复导入的繁琐操作:

方案一:创建Python包(推荐,更规范易维护)

这种方式适合长期维护的项目,结构更清晰:

  1. 新建一个文件夹(比如叫my_func_scripts),把script2.py、script3.py、script4.py都移进去
  2. 在这个文件夹里创建一个__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]
  1. 回到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:30:11