Was sind 'globals' und 'local' Parameter in Python __import__ Funktion für?

8

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 angegebenen globals und locals , um zu bestimmen, wie name in einem Paketkontext zu interpretieren ist. Die Standardimplementierung verwendet ihr locals -Argument überhaupt nicht und verwendet ihr globals 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?

    
Martin Tóth 02.02.2011, 09:15
quelle

3 Antworten

4
  

Die Standardimplementierung verwendet ihr Argument locals überhaupt nicht und verwendet ihr globals nur, um den Paketkontext der import -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.

    
9000 02.02.2011, 12:34
quelle
1

globals wird verwendet, um den aktuellen Kontext zu bestimmen, in dem der Import aufgerufen wird. Zum Beispiel:

%Vor%

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.

    
vz0 02.02.2011 12:45
quelle
-1
  

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.

    
S.Lott 02.02.2011 12:34
quelle

Tags und Links