Hallo zusammen,
ich bin ein ziemlicher Neuling und hoffe meine Frage ist jetzt nicht zu trivial (habe aber zumindest in Tutorials und mit de Suche keine sinnige Lösung gefunden)
Ich möchte zu Anfang meiner Skripte einige Sachen initialisieren
z.B. bestimmte globale Variablen füllen
oder eine Anweisung wie logger = logging.getLogger(__name__) usw.
Um die Skripte besser lesbar zu machen würde ich diese "Start-Initialisierung" gerne modularisieren. Wenn ich dies aber mit einer Funktion tue passiert die Initialisierung ja auf deren Ebene und nicht global.
Wie man macht man sowas am besten oder geht das gar nicht ?
Heon
"globalen" Code modularisieren
Fuer das konkrete Beispiel kannst du natuerlich problemlos
machen, aber ganz ehrlich: das ist nicht wirklich so gut. Und was ausser dem Logger (der ja auch nicht in jedes Modul *muss*, kann ja auch im Package darueber einer sein, das reicht dann ggf) soll denn da so stehen, was *alle* Module haben?
Code: Alles auswählen
from mylib import init
logger = init(__name__)
@Heon: es gibt eigentlich nichts, was man in jedem Modul am Anfang machen müßte, so dass es keinen Sinn macht, das wieder in ein anderes Modul auszulagern. `logger` sind für jedes Modul individuell und globale Variablen sollte es nicht geben. Handelt es sich um Konstanten, dann ginge ja der Kontext verloren, dass es sich um Konstanten dieses Moduls handelt, dann wären es ja Konstanten des neuen Moduls.
Hallo,
vielleicht habe ich es unklar ausgedrückt oder ich denke einfach in die falsche Richtung.
Ich habe in meinem Modul ein Hauptprogramm (wenn das in Python so überhaupt heißt) und viele Funktionen.
Zum Start meines Hauptprogrammes mache ich viele Dinge, wie dass ich z.B. den Logger starte oder eben initiale Werte an Variablen zuweise oder eben auch Konstanten definiere. Und ich persönlich finde es eben schlecht lesbar wenn da erstmal soviel Spagetti-Initialsierung stattfindet. In ABAP kann man solch einen Code-Schnipsel z.B. in ein Include auslagern.
Heon
vielleicht habe ich es unklar ausgedrückt oder ich denke einfach in die falsche Richtung.
Ich habe in meinem Modul ein Hauptprogramm (wenn das in Python so überhaupt heißt) und viele Funktionen.
Zum Start meines Hauptprogrammes mache ich viele Dinge, wie dass ich z.B. den Logger starte oder eben initiale Werte an Variablen zuweise oder eben auch Konstanten definiere. Und ich persönlich finde es eben schlecht lesbar wenn da erstmal soviel Spagetti-Initialsierung stattfindet. In ABAP kann man solch einen Code-Schnipsel z.B. in ein Include auslagern.
Heon
@Heon: kannst Du ein Beispiel posten?
Eine typisches Python-Modul sieht so aus:
Wird einem das zu viel, kann man Funktionen und Konstanten in sinnvolle Gruppen zusammenfassen und als weiteres Modul importieren. Steht in `main` zu viel Initialisierung, kann man dafür ja auch einfach eine Funktion schreiben. Zu viel geht eigentlich aber auch gar nicht, weil bei mehr als einer Handvoll lokaler Variablen ist die Funktion sowieso zu lang und sollte weiter aufgeteilt werden, und eventuell Klassen eingeführt werden.
Eine typisches Python-Modul sieht so aus:
Code: Alles auswählen
import a
import b
import logging
logger = logging.getLogger(__name__)
KONSTANTE_A = 1
KONSTANTE_B = 2
def funktion1():
...
def funktion2():
...
def main():
das Hauptprogramm
if __name__ == '__main__':
main()