Python: import wo?

OP Persönliche Seite #6103979
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.
#6103990
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.
Moderator #6104000
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren