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

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