首页 > 解决方案 > Python 字符串到模块引用

问题描述

有没有办法从字符串中“引用”模块?例如,以下是相当重复的:

module = "module1"

if module == "module1":
    module1.function1()
elif module == "module2":
    module2.function1()
elif module == "module3":
    module3.function1()

# Other code...

if module == "module1":
    module1.function2()
elif module == "module2":
    module2.function2()
elif module == "module3":
    module3.function2()

所以我想知道是否有更好的方法来做到这一点,例如exec(module).function1()(这不起作用,也可能不安全......)

或者,有没有更好的方法来编码这种类型的东西?每个文件用于不同的站点,但具有相同的功能。

标签: pythonpython-3.x

解决方案


如果您的字符串和模块名称不同,您可以在程序开头设置一个 dict:

import module1
import module2

modules = {
  "module1": module1,
  "module2": module2,
  ...
}
...

modules[moduleName].function1()
modules[moduleName].function2()

如果您的字符串始终与模块的名称相同,那么您可以使用importlib

from importlib import import_module

...

import_module(moduleName).function1()
import_module(moduleName).function2()

推荐阅读