11.4 Built-in Functions 

Es existieren zwei Built-in Functions, die sich auf Modularisierung, also auf das Einbinden von Modulen und Paketen beziehen. Diese Funktionen wurden in Abschnitt 10.7, »Vordefinierte Funktionen«, nicht erläutert, da das Konzept der Modularisierung Ihnen zu diesem Zeitpunkt noch nicht bekannt war. Aus diesem Grund soll die Beschreibung der Built-in Functions __import__ und reload an dieser Stelle nachgeholt werden. Beachten Sie, dass diese beiden Funktionen nur in wenigen Fällen benötigt werden und daher an dieser Stelle nur oberflächlich erläutert werden. Ausführliche Informationen über die Funktionen finden Sie in der Python-Dokumentation.
__import__(name[, globals[, locals[, fromlist[, level]]]])
Die Built-in Function __import__ wird von der import-Anweisung verwendet, um ein Modul oder Paket einzubinden. Die Funktion existiert hauptsächlich, damit sie vom Programmierer überschrieben werden kann, um das Verhalten der import-Anweisung zu verändern. Zum Überschreiben der Funktion muss eine neue Funktion mit gleicher Schnittstelle erstellt und dem Namen __import__ zugewiesen werden.
Die Funktion __import__ bindet das Modul oder Paket name ein und gibt den erzeugten Namensraum zurück. Dabei kann für globals und locals jeweils ein Dictionary übergeben werden, das alle Referenzen des globalen bzw. lokalen Namensraums enthält. Ein solches Dictionary wird von den Built-in Functions globals und locals erstellt. Für den vierten Parameter, fromlist, kann eine Liste mit Namen übergeben werden, die aus dem Modul name eingebunden werden sollen. Der fünfte Parameter, level, gibt an, ob absolutes oder relatives Importverhalten verwendet werden soll (vgl. Abschnitt 11.3.2). Der voreingestellte Wert von -1 weist die Funktion __import__ dazu an, sowohl absolutes als auch relatives Importverhalten zu zeigen. Ein Wert von 0 würde absolutes Importverhalten vorschreiben, während ein positiver Wert größer null die Anzahl der übergeordneten Verzeichnisse festlegt, die beim relativen Importverhalten mit einbezogen werden sollen.
Die beiden import-Anweisungen
import bla from blubb import hallo, welt
resultieren intern in den folgenden Aufrufen von __import__:
__import__("bla")
__import__("blubb", globals(), locals(), ["hallo", "welt"], -1)reload(module)
Mithilfe der Funktion reload kann ein bereits eingebundenes Modul oder Paket erneut geladen und initialisiert werden. Das ist besonders dann sinnvoll, wenn ein selbst geschriebenes Modul in einer Sitzung im interaktiven Modus eingebunden ist und während der Sitzung Änderungen am Quelltext des Moduls durchgeführt wurden. In einem solchen Fall kann die Funktion reload dazu verwendet werden, das Modul neu einzubinden, ohne die Sitzung im interaktiven Modus beenden zu müssen. Beachten Sie, dass ein Modul nicht mit einer erneuten import-Anweisung neu eingebunden werden kann, da diese zuerst überprüft, ob das Modul bereits eingebunden und initialisiert wurde.
Allgemein ist von der Verwendung von reload vor allem im Quelltext eines Programms, also außerhalb des interaktiven Modus, abzuraten, da das Neuinitialisieren eines Moduls Probleme hervorrufen kann. Diese Probleme sind zum Teil sehr speziell und sollen hier nicht weiter erläutert werden. Eine genaue Beschreibung der möglichen Probleme finden Sie in der Python-Dokumentation.




bestellen





