Python: import wo?

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

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.