首頁 >後端開發 >Python教學 >從字串變數導入模組時,Python 的 `__import__` 與標準 `import` 有何不同?

從字串變數導入模組時,Python 的 `__import__` 與標準 `import` 有何不同?

Patricia Arquette
Patricia Arquette原創
2024-12-05 05:39:09959瀏覽

How Does Python's `__import__` Differ from Standard `import` When Importing Modules from String Variables?

使用“__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

此方法提供了從字串導入模組的更一致和直接的方法

注意:

  • 從子資料夾(例如./feature/email.py)導入時,importlib 語法變成 importlib.import_module(" feature.email")。
  • 在 Python 3.3 之前,存在使用 importlib.import_module 匯入需要資料夾中的 __init__.py 檔案。

以上是從字串變數導入模組時,Python 的 `__import__` 與標準 `import` 有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn