如何导入带共同前缀的Python函数?避免频繁修改导入代码
解决Python批量导入特定前缀函数的问题
Python的import语法不支持foo_*这种通配符写法,所以会触发语法错误。要实现自动导入所有以foo_开头的函数,有两种实用方案:
方案一:在main.py中动态导入
无需修改testcases.py,直接在主脚本里筛选并导入目标函数:
#!/usr/bin/python3 import testcases # 遍历testcases模块的所有成员,筛选出foo_开头的可调用函数 for name in dir(testcases): if name.startswith('foo_') and callable(getattr(testcases, name)): # 将函数添加到当前命名空间,直接调用即可 globals()[name] = getattr(testcases, name) # 直接调用导入的函数 foo_1() foo_2() # 后续新增的foo_3()、foo_4()等也能直接调用,无需修改main.py
方案二:修改testcases.py自动生成导出列表
在testcases.py末尾添加自动生成__all__的代码,这样主脚本可以用import *精准导入目标函数:
修改后的testcases.py
def foo_1(): do_1() def foo_2(): do_2() def bar_1(): do_3() def bar_2(): do_4() # 自动生成仅包含foo_开头函数的导出列表 __all__ = [name for name in dir() if name.startswith('foo_') and callable(globals()[name])]
简化后的main.py
#!/usr/bin/python3 from testcases import * foo_1() foo_2() # 新增foo_开头的函数后,无需修改main.py即可直接调用
两种方案都能满足“新增foo_函数无需修改main.py”的需求,可根据实际场景选择:方案一适合无法修改testcases.py的情况,方案二的主脚本写法更简洁直观。
内容的提问来源于stack exchange,提问作者Qiang Xu
相关产品推荐
相关产品推荐

