1、__import __(name,globals = None,locals = None,fromlist =(),level = 0)
该函数导入模块name,实际上是使用给定的globals和locals变量来决定如何在一个包上下文中解析name
。fromlist给出对象或子模块名,即应该根据给定名称而导入的模块名。标准的启用中根本不会使用它的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对象转换为列表,以便查看里面的模块对象