Forum: PC-Programmierung Python: import wo?


von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Hi, in Python-Programmen hab ich bislang die benötigten Imports immer am 
Dateianfang, und Beispielcode, die man so findet, machet das auch so.

Hier werden die Imports jedoch in Funktionen bzw. Methoden gemacht:
1
def getNotifier(config, groupset):
2
    [...]
3
    from svnmailer import settings
4
    from svnmailer.notifier import _textmail, _multimail
Der Code ist Teil einer Diskussion über GIT-Hooks, die momentan in den 
GCC Mailing-Listen geführt wird[*] und arbeitet in SVN-Hooks.

http://gcc.gnu.org/ml/gcc/2019-09/msg00097.html

Ich geh mal davon aus, dass Daniel Berlin genau weiß, was er da macht...

Was sind Vorteile / Nachteile davon?


[*] Dieses Wochenende wird GCC von SVN auf GIT umgestellt.

von Sven B. (scummos)


Lesenswert?

Ich sehe zwei Gründe dafür, es gibt aber bestimmt mehr:

 - Manche imports sind relativ langsam. Wenn man sie nur bei bestimmter 
Funktionalität braucht, kann man die Startzeit sparen.

 - Bei Abhängigkeiten die nicht überall verfügbar sind geht nur ein 
bestimmtes Feature nicht, statt dass das ganze Programm nicht startet.

Letzteres ist natürlich auch anders erreichbar.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Die importierten Symbole (hier settings, _textmail und _multimail) sind
lokal und damit nur in getNotifier bekannt. Das ist gut so, denn gerade
der Name "settings" ist so allgemein, dass er durchaus noch anderswo im
Programm mit anderer Bedeutung auftreten könnte.

Wenn getNotifier nie aufgerufen wird, wird auch das Modul nicht
importiert, das spart Speicherplatz.

Du brauchst übrigens nicht zu befürchten, dass das Modul bei
wiederholtem Aufruf von getNotifier erneut geladen wird. Jedes Modul
wird höchstens einmal geladen, unabhängig davon, in welchem Scope die
Import-Anweisung steht.

: Bearbeitet durch Moderator
von Gerd E. (robberknight)


Lesenswert?

Ich vermute hier mal andere Gründe, aber ich hab sowas schon mal gemacht 
weil ein zu importierendes Modul für seine Initialisierung Daten 
brauchte, die am Anfang meines Moduls noch nicht verfügbar waren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.