Python中,__import__函数可以动态地导入模块。__import__函数接受一个模块名作为参数,并返回对应的模块对象。__import__函数是一个底层的函数,通常情况下不建议直接使用它来导入模块。

1、__import __(name,globals = None,locals = None,fromlist =(),level = 0)

该函数导入模块name,实际上是使用给定的globalslocals变量来决定如何在一个包上下文中解析namefromlist给出对象或子模块名,即应该根据给定名称而导入的模块名。标准的启用中根本不会使用它的locals 参数,并且它的globals只是用来决定import语句的包上下文。

level指定是否使用绝对或相对导入,0(默认)表示只执行绝对导入,level正值表示需要搜索调用模块目录相关的父目录的数量。

name变量是package.module形式时,通常返回顶层包(模块名上询至第一个点),而不是由name命名的模块。然而,当给定非空fromlist参数时,都会返回name命名的模块。

函数功能用于动态的导入模块,主要用于反射或者延迟加载模块。

官方文档https://docs.python.org/3/library/functions.html#__import__

2、利用__import__导入模块

使用__import__函数可以动态地导入模块,但它并不是 Python 中首选的导入模块的方法。通常情况下,我们更推荐使用import语句或者importlib模块中的函数来导入模块,因为它们更加直观、易读和易维护。

# 导入单个模块
module_name = 'math'
math_module = __import__(module_name)
print(math_module.sqrt(16))  # 输出 4.0

# 导入模块的子模块
submodule_name = 'os.path'
os_path_module = __import__(submodule_name)
print(os_path_module.join('path1', 'path2'))  # 输出 path1/path2

# 通过fromlist参数导入模块中的子模块或属性
module_name = 'os'
os_module = __import__(module_name, fromlist=['path'])
print(os_module.path.join('path1', 'path2'))  # 输出 path1/path2


# 将给定内容转换为代码执行
moduleNames = ['sys', 'os', 're', 'unittest']
moduleNames
modules = map(__import__, moduleNames)
print(list(modules))  # 将map对象转换为列表,以便查看里面的模块对象

推荐文档