Dieser Artikel bietet Ihnen einen Vergleich der Unterschiede zwischen import und __import__() in Python. Ich hoffe, dass er für Freunde hilfreich ist.
Lassen Sie uns zunächst über den Unterschied zwischen den beiden sprechen:
Der Importbefehl führt zwei Dinge aus: 1) Nach Modulen suchen, 2) An lokale Variablen binden
Eingebaut function_ _import__() macht nur eines: nach Modul suchen
Während der Ausführung der Importanweisung wird __import__() aufgerufen, um den Modulabruf abzuschließen.
Der Prozess der Suche nach Modulen:
Bevor wir den Suchprozess verstehen, wollen wir zunächst einige Rollen in der internen Implementierung verstehen:
a) Das gesuchte Modul wird in a existieren im Modulcache (sys.modules).
b) Finder |. Importer: Wird verwendet, um nach dem Standort des Moduls zu suchen. Nach dem Auffinden wird die Modulspezifikation zurückgegeben (einschließlich Informationen, z. B. wo sich das Modul befindet, welcher Loader zum Laden verwendet werden soll usw.). .
Die Finder werden über das integrierte Modul gefunden, und die Importer werden von anderen Standorten aus gefunden.
Importeure sind erweiterbar und können bestimmte Pfade, Zips und URLs im Dateisystem unterstützen.
c) Lader: Laden Sie entsprechend der Modulspezifikation, um ein Modul in Python zu generieren
module = modulespec.loader.load_module(modulespec.name)
Der Suchvorgang ist wie folgt:
1) Wenn der Name des zu durchsuchenden Moduls in der Datei enthalten ist Cache (sys.modules) und führen Sie dann die folgenden Vorgänge aus:
1.1) Wenn der Wert None ist, werfen Sie ModuleNotFoundError
1.2) Wenn der Wert nicht None ist, geben Sie den Wert direkt zurück
2) Finden Sie ihn unter Das integrierte Modul wird von Findern nicht gefunden, und wenn es vom Importeur nicht gefunden wird, können die Importer nicht gefunden werden. Der Name des Moduls wird zwischengespeichert, der Wert ist None und dann wird ModuleNotFoundError ausgelöst.
Wenn Sie bei der Suche mit Importern .pyc finden, müssen Sie zunächst prüfen, ob .pyc die neueste Version ist.
Nachdem es gefunden wurde, kehren Sie zurück, um eine Modulspezifikation zu generieren und zu erstellen
3) Der Loader in der Modulspezifikation lädt das Modul und führt es aus:
module = modulespec.loader.load_module(modulespec.name) sys.modules[modulespec.name] = module modulespec.loader.exec_module(module)
4) Am Ende, wenn Wenn das Modul nicht gefunden wird, notieren Sie den Modulnamen im Cache, der Wert ist None, und lösen Sie dann ModuleNotFoundError
Das obige ist der detaillierte Inhalt vonVergleich der Unterschiede zwischen import und __import__() in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!