Heim >Backend-Entwicklung >Python-Tutorial >Wie unterscheidet sich Pythons „__import__' vom Standard-„import' beim Importieren von Modulen aus String-Variablen?
Module aus String-Variablen mit „__import__“ importieren: Unterschiede zu normalen Importanweisungen
In Python der import Mit dieser Funktion können Module dynamisch aus einer String-Variablen importiert werden. Dies kann jedoch im Vergleich zur Verwendung regulärer Importanweisungen zu unerwarteten Ergebnissen führen.
Betrachten Sie das folgende Beispiel:
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
Ein Vergleich der resultierenden Listen zeigt, dass das y-Objekt eine Mischung aus enthält Attribute aus matplotlib und matplotlib.text, während ihm die gewünschten Informationen über die Hauptklassen aus matplotlib.text fehlen.
Dieses Verhalten wird durch die erklärt Import Funktionsmechanismus. Standardmäßig wird das durch das String-Argument angegebene Modul der obersten Ebene importiert. In diesem Fall bezieht sich „matplotlib.text“ auf das Modul matplotlib.text, aber import importiert stattdessen matplotlib.
Um dieses Problem zu beheben, können Sie eine leere Zeichenfolge als drittes Argument angeben zu __import__, wie im folgenden geänderten Code zu sehen ist:
i = __import__('matplotlib.text', fromlist=['']) y = dir(i) # Get attributes of matplotlib.text
Dies wird dazu führen import, um speziell das Modul matplotlib.text zu importieren, was dazu führt, dass y die gewünschte Liste von Attributen enthält.
Ein alternativer Ansatz ist die Verwendung des Importlib-Moduls von Python 3.1:
import importlib i = importlib.import_module("matplotlib.text") y = dir(i) # Get attributes of matplotlib.text
Diese Methode bietet eine konsistentere und einfachere Möglichkeit, Module aus String zu importieren Variablen.
Hinweis:
Das obige ist der detaillierte Inhalt vonWie unterscheidet sich Pythons „__import__' vom Standard-„import' beim Importieren von Modulen aus String-Variablen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!