Heim >Backend-Entwicklung >Python-Tutorial >Wie unterscheidet sich Pythons „__import__' vom Standard-„import' beim Importieren von Modulen aus String-Variablen?

Wie unterscheidet sich Pythons „__import__' vom Standard-„import' beim Importieren von Modulen aus String-Variablen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-05 05:39:09960Durchsuche

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

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:

  • Beim Importieren aus Unterordnern (z. B. ./feature/email.py) wird die Importlib-Syntax zu importlib.import_module(" feature.email").
  • Vor Python 3.3 das Vorhandensein einer __init__.py Die Datei im Ordner war für Importe mit importlib.import_module erforderlich.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn