Python中如何通过方法名字符串从对应库导入指定方法?
Python 动态导入模块实现按需加载
你写的from sklearn import the_method这种直接传变量名的写法不符合Python语法,要实现运行时指定模块名动态导入、按需加载的效果,直接用Python标准库自带的importlib模块即可,不需要额外安装第三方依赖。
基础实现(和静态导入效果完全一致)
对应你要的from sklearn import metrics动态版本写法如下:
import importlib the_method = "metrics" # 动态导入sklearn下指定名称的子模块 metrics = importlib.import_module(f".{the_method}", package="sklearn")
这段代码运行后的效果和静态写from sklearn import metrics完全一致,后续可以直接用metrics.xxx的形式调用模块下的所有方法、类,而且只有代码运行到这行导入逻辑时,才会真正加载metrics模块,没触发的模块不会占用内存,完全满足按需加载的要求。
进阶:动态导入模块下的指定方法/类
如果你需要更细粒度的导入,比如只导入某个模块下的指定函数,配合内置函数getattr使用即可:
import importlib module_name = "metrics" func_name = "accuracy_score" # 先导入父模块 target_module = importlib.import_module(f".{module_name}", package="sklearn") # 再取出模块下的指定方法/类 target_func = getattr(target_module, func_name) # 后续直接调用即可 # print(target_func([1, 0], [1, 1]))
注意点
- 不要直接用
__import__内置函数做动态导入,这个函数是Python内部给导入机制预留的接口,官方文档明确推荐日常动态导入优先使用importlib.import_module - 如果要把导入的模块/方法动态绑定到当前作用域的变量名,也可以直接操作
globals()字典实现,比如globals()[the_method] = importlib.import_module(...),效果和直接写赋值语句完全一致。
内容的提问来源于stack exchange,提问作者DanielTheRocketMan
相关产品推荐
相关产品推荐

