Es gibt einen Teil von __import__
in der Python-Dokumentation, den ich nicht verstehe:
__import__(name[, globals[, locals[, fromlist[, level]]]])
Die Funktion importiert das Modul
name
, möglicherweise unter Verwendung der angegebenenglobals
undlocals
, um zu bestimmen, wiename
in einem Paketkontext zu interpretieren ist. Die Standardimplementierung verwendet ihrlocals
-Argument überhaupt nicht und verwendet ihrglobals
nur, um den Paketkontext der Importanweisung zu bestimmen.
Was gibt es über den Modulnamen zu "interpretieren"? Was ist Paketkontext?
Ein Beispielaufruf mit diesen Parametern sieht folgendermaßen aus:
%Vor% Warum liefert das Beispiel globals()
und locals()
für die Funktion? Was passiert, wenn ich nur globals()
zur Verfügung stelle? Oder auch nicht?
Ich vermisse wahrscheinlich einen Teil der Namensraumlogik in Bezug auf den Import von Modulen. Könnten Sie mich auf einen Artikel hinweisen, der dies erklärt / Beispiele mit __import__
Funktion hat?
Die Standardimplementierung verwendet ihr Argument
locals
überhaupt nicht und verwendet ihrglobals
nur, um den Paketkontext derimport
-Anweisung zu bestimmen.
(aus docs.python.org )
Ich habe immer noch keine Ahnung wie globals
benutzt werden; Welche globale Variable kann die Funktionsweise von import
beeinflussen?
BEARBEITEN: Nach dem Betrachten von import.c
in Python 2.5 Quelle fand ich, dass __import__
entweder __name__
oder __path__
in globals
erwartet, um den Import-Suchpfad zu erweitern relativ zu Pfad (en) in einer dieser Variablen in dieser Reihenfolge.
globals
wird verwendet, um den aktuellen Kontext zu bestimmen, in dem der Import aufgerufen wird. Zum Beispiel:
Sie sind nicht gleich, da es auf # 2 keinen (einfachen) Weg gibt zu wissen, von welchem Modul der Import aufgerufen wird. Die Funktion __import__
muss wissen, welches das aktuelle Modul ist, um die richtige foo
zu importieren.
Intern auf __import__()
, globals
wird verwendet, um den Verweis auf das aktuelle Modul zu erhalten, das den Import aufruft. Aus dem __import__
Quellcode :
Gibt das Paket zurück, in dem ein Import ausgeführt wird. Wenn globals kommt aus dem Modul foo.bar.bat (nicht selbst ein Paket), gibt dies die sys.modules-Eintrag für foo.bar. Wenn Globals aus dem init .py eines Pakets stammt, Der Eintrag des Pakets in sys.modules wird als geliehener Verweis zurückgegeben.
Was gibt es über den Modulnamen zu "interpretieren"? Was ist Paketkontext?
Wenn Sie
eingeben %Vor%Python muss diesen Namen "interpretieren". Ist es eine globale? Ist es ein lokaler?
%Vor% Nun ist x
eindeutig lokal. a
muss "interpretiert" werden. Global? Lokal?
Warum stellt das Beispiel globals () und locals () der Funktion zur Verfügung? Was passiert, wenn ich nur globals () zur Verfügung stelle? Oder nicht?
Probieren Sie es aus und sehen Sie. Ernst. Es ist einfacher damit zu spielen als zu fragen.
Wichtig ist, dass die Dinge, die Sie an der Eingabeaufforderung >>>
tun, global sind.
Sie müssen Funktionen definieren, die einen lokalen Kontext erstellen, damit Sie die Unterschiede zwischen global und lokal sehen können.