Ich habe nur "gedacht" Ich habe verstanden, wie Import und Module funktionieren, aber offensichtlich brauche ich mehr Schulung.
Hier ist ein Beispielprogramm (nur ein Testfall von somrthing, den ich tue, der in Umfang und Maßstab viel größer ist) und ein Modul:
quick.py
%Vor%quick_window.py
%Vor%läuft bekomme ich
%Vor%Damit es funktioniert, muss ich gtk auch so in das Modul importieren (reimportieren):
%Vor%Warum sollte ich gtk mehr als einmal importieren? Bedeutet das, dass ich 2 "gtk's" im Speicher habe?
Muss ich alles innerhalb jedes Moduls importieren, das ich in diesem Modul brauche?
Ich weiß, dass jedes Modul seinen eigenen Namensraum hat, aber ich dachte, dass es auch die "Globals" geerbt hat, einschließlich des importierten Moduls aus dem aufrufenden Programm.
Ich hatte den Eindruck, dass der Import von Modulen wie das Ausschneiden und Einfügen des Codes an dieser Stelle ist. Gibt es einen anderen Weg, das zu tun?
Hilfe wird sehr geschätzt.
Narnie
Die Details des Imports werden sehr kompliziert, aber konzeptionell ist es sehr einfach.
Wenn Sie schreiben:
%Vor%Es entspricht dem:
%Vor%wo import_module wie folgt aussieht:
%Vor%Zwei Dinge, die hier zu beachten sind: Die Zuweisung von some_module ist spezifisch: Eine import-Anweisung macht im aktuellen Modul wirklich nichts anderes als ein Modulobjekt dem von Ihnen angegebenen Namen zuzuordnen. Deshalb erhalten Sie die Namen nicht automatisch aus dem importierten Modul und warum ist es nicht so, als würde man den importierten Code in das aktuelle Modul kopieren.
Auch wenn in der Pseudo-Funktion import_module der Name bereits irgendwo importiert wurde, befindet er sich in der globalen Liste aller Module (sys.modules) und wird daher einfach wiederverwendet. Die Datei wird nicht erneut geöffnet, sie wird nicht erneut ausgeführt, die Globals in diesen Modulen erhalten keine neuen Werte und so weiter. Das gleiche Modul an vielen Orten zu importieren ist keine Verschwendung oder zusätzliche Arbeit, es ist sehr schnell.
ist erforderlich, um den Inhalt der py-Datei in den Namespace dieses Moduls zu bringen. Wenn Sie nicht importieren, können die darin enthaltenen Namen nicht referenziert werden.
Einige weitere Informationen: Ссылка
Wenn Python ein Modul importiert, wird es zuerst angezeigt Überprüft die Modulregistrierung (sys.modules) um zu sehen, ob das Modul ist bereits importiert Wenn das der Fall ist, Python verwendet das vorhandene Modulobjekt wie es ist.