mikrocontroller.net

Forum: PC-Programmierung Python: import wo?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Johann L. (gjlayde) Benutzerseite


Bewertung
0 lesenswert
nicht 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:
def getNotifier(config, groupset):
    [...]
    from svnmailer import settings
    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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.