使用“__import__”從字符串變量導入模塊:與普通導入語句的區別
在Python 中,import函數允許從字串變數動態導入模組。但是,與使用常規導入語句相比,這可能會導致意外結果。
考慮以下範例:
import matplotlib.text as text x = dir(text) # Get attributes of matplotlib.text i = __import__('matplotlib.text') y = dir(i) # Get attributes of the imported module j = __import__('matplotlib') z = dir(j) # Get attributes of matplotlib
結果清單的比較顯示y 物件包含以下內容的混合:來自matplotlib 和matplotlib.text 的屬性,而它缺少有關matplotlib.text 中主類別的所需資訊。
此行為由導入函數的機制。預設情況下,它會導入由字串參數指定的頂級模組。在本例中,「matplotlib.text」引用 matplotlib.text 模組,但 import 改為導入 matplotlib。
要解決此問題,您可以提供一個空字串作為第三個參數到__import__,如以下修改後的程式碼所示:
i = __import__('matplotlib.text', fromlist=['']) y = dir(i) # Get attributes of matplotlib.text
這將導致import 到專門導入matplotlib.text 模組,導致y 包含所需的屬性清單。
另一種方法是使用Python 3.1 的importlib 模組:
import importlib i = importlib.import_module("matplotlib.text") y = dir(i) # Get attributes of matplotlib.text
此方法提供了從字串導入模組的更一致和直接的方法
注意:
以上是從字串變數導入模組時,Python 的 `__import__` 與標準 `import` 有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!