Hallo!
Ich hoffe, dass ich es verständlich formulieren kann.
Meine Tests haben folgendes ergeben:
Wenn eine
Import-Anweisung, nicht eingerückt (also in der Hirarchie ganz oben), in einem Modul steht, egal ob oben oder unten im Skript, dann wird diese beim Laden des Moduls ausgeführt. Da ein Modul wiederum mehrere Abhängigkeiten haben kann, werden diese ebenfalls geladen wenn in diesen Modulen Import-Anweisungen stehen die nicht durch Klassendefinitionen oder auf eine andere Art vom restlichen Code abgegrenzt werden. Das zieht bei größeren Programmen einen Rattenschwanz nach sich, den ich bei meinen Tests
spürbar bemerkte.
Ganz besonders ist mir dieses Verhalten unter
Windows in Verbindung mit
GTK aufgefallen. Da konnte man schon mal
eine bis zwei Sekunden warten, auch wenn GTK von den importierten Funktionen nicht benötigt wurde.
Für mich bedeutet das, dass es besser ist, wenn Module dort importiert werden,
wo sie gebraucht werden. Das hat noch einen Vorteil --> ich sehe die Funktionen der importierten Module nur in dem Bereich, in dem ich sie auch brauche. Bei größeren Projekten könnten dadurch Fehler vermieden werden.
Die Module werden anscheinend nur bei der
ersten Import-Anweisung in den Speicher geladen. Zusätzliche, später oder in anderen Funktionen auftretende, Import-Anweisungen greifen nicht mehr auf die Festplatte zu. Das zu importierende Modul wird
nicht noch einmal initialisiert, es wird nur der Zugriff auf die Funktionen des importierten Moduls frei gegeben.
Dabei konnte ich keinen merkbaren Unterschied zwischen den Anweisungen
from MODULE import FUNCTION und
import MODULE feststellen. Allerdings habe ich dieses Verhalten nicht gestoppt.
Vieleicht weiß noch jemand etwas wissenswertes zu diesem Thema.
Ich lasse mich gerne beraten.
Ich möchte in meinen
kleinen Programmen die gleiche Struktur wie in den
großen Programmen verwenden. Auch wenn es bei kleinen Programmen kein Problem ist, die Module, die in mehreren Funktionen verwendet werden, am Anfang zu importieren und die Module, die nur vereinzelt in Funktionen verwendet werden, in diesen selbst zu importieren, ist es bei großen Projekten unmöglich. Deshalb dachte ich mir, wenn es kein Problem macht ein Modul mehrmals zu importieren, dass ich die Module dort importiere wo sie gebraucht werden.
Um trotzdem eine Übersicht über alle benötigten Module zu haben, könnte ich mir vorstellen, für jedes zu importierende Modul einen Kommentar an den Anfang des Programms zu schreiben.
Gibt es protokollierte Geschwindigkeitstests? Was wird von den Programmierern von Python empfohlen?
Ich konnte mich in der kurzen Zeit, in der ich
auch in Python programmiere, noch nicht genauer mit den Internas von Python beschäftigen.
lg
Gerold