Übergreifende/Globale Variable in Python?
Hallo, hab mal eine Frage, bitte um eure Hilfe!
Wie kann man in Python eine globale Variable deklarieren?
Ich habe ein Programm, das eine Bibliothek miteinbezieht. Es soll eine Variable in der Bibliothek abwechslend auf 1 und 0 gesetzt werden, vom Hauptprogramm aus. Habe es momentan so gelöst, dass der Main-Code ein Textdokument erstellt und den Wert der Variable immer abwechslend hineinschreibt. Die Bibliothek liest das selbe Textdokument aus und erhält so den Wert der Variable. Nun, es ist eine eher umständliche Methode, wenn man bedenkt das es nicht gut ist, dass das Programm immer auf die SD-Karte schreibt( benutze einen Raspberry), da das Programm später dauerhaft laufen soll.
Gibt es eine einfachere und bessere Methode?
Bin dankbar für jede Rückmeldung.
1 Antwort
Globale Variablen sind allgemein eher schlechter Stil, da es schnell unkontrollierte Seiteneffekte gibt.
Das einfachste wäre deiner Bibliothek eine Methode zu spendieren die die relevante Variable auf den übergebenen Wert umsetzt.
Ansonsten ist der Standard-Weg ein drittes Modul global.py zu schaffen, das dann von main und deinem Modul importiert wird, siehe https://docs.python.org/3/faq/programming.html#how-do-i-share-global-variables-across-modules
Das Haupt-Problem an deiner Text-Lösung ist nicht der absolut vernachlässigbare Verschleiß der SD-Karte, sondern das selbst auf SD-Karten File IO sehr langsam ist im Vergleich zum RAM oder Prozessor-nahem Speicher.
Vielen Dank, hätte nicht mit so einer schnellen Antwort gerechnet.^^
Zur Info: Mein Programm liest Sensordaten aus, dazu wird eben diese Bibliothek benötigt. Da ich mehrere Sensoren mit der gleichen I2C Adresse verwende, muss ich auch die 2 I2C Kanäle des Raspi's verwenden. Um die beiden Sensoren auszuwerten, muss ich also dauerhaft zwischen den Bus-Kanälen wechseln (Bus 1 und Bus 0). Ich könnte alternativ auch einfach die Bibliothek kopieren und diesen Wert austauschen, dass dann das Main-Programm quasi beide Bibliotheken sequentiell durchläuft. Habe da allerdings auch Bedenken, da diese Library über 800 Zeilen Code umfasst und wenn diese immer 2x "durchforstet" wird, was auch alles ziemlich verlangdamt.
Sonst müsste ich alternativ das Problem mittels Hardware lösen, in dem ich einen i2c Multiplexer verwende.