python之__import__使用

1. 使用场景

有时候希望从配置文件或者其他字符串等中获取要被动态加载module,但是字符串类型的数据是无法用import导入,如

>>>import 'math'
  File "<input>", line 1
    import 'math'
                ^
SyntaxError: invalid syntax

遇到如此场景,使用__import__来解决,示例:

>>>__import__('math')
<module 'math' (built-in)>

2. __import__

Python 提供内建函数 import 动态加载 module,import 的用法如下:

__import__ (name[, globals[, locals[, fromlist[, level]]]])
  • name (required): 被加载 module 的名称
  • globals (optional): 包含全局变量的字典,该选项很少使用,采用默认值 global()
  • locals (optional): 包含局部变量的字典,内部标准实现未用到该变量,采用默认值 local()
  • fromlist (Optional): 被导入的 submodule 名称
  • level (Optional): 导入路径选项,默认为 -1,表示同时支持 absolute import 和 relative import
    使用示例:
>>>math_module = __import__('math')
>>>math_module.log(2)
0.6931471805599453

3. import本质

import本质上是调用__import__加载module的,示例:

import math

本质是调用如下函数实现

math =__import__('math',globals(), locals(), [], -1)

4. __import__坑点

__import__并不支持class, object的动态导入,只支持module的动态导入。示例:

两者导入的都是os模块

__import__('os')
<module 'os' from 'C:\\Anaconda3\\envs\\showtools\\lib\\os.py'>

__import__('os.path')
<module 'os' from 'C:\\Anaconda3\\envs\\showtools\\lib\\os.py'>

动态导入class, object:可以采用openstack的 oslo.utils

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章