Hallo zusammen,
in einem kleinen Steuerprogramm muss ich mit bestimmter Frequenz (z.B. 10 oder 50Hz) immer wieder Daten senden.
Das wird in einer Funktion gemacht. Im Grunde krieg ich das hin, indem ich die Zeitdifferenz zwischen time.time() und einem Initialwert (STARTZEIT) prüfe.
Zur Verdeutlichung hab ich nen kleinen Code unten angefügt, der den Kern meines Anliegens beinhaltet.
Das Problem ist, dass beim Aufruf der Funktion der Wert von STARTZEIT irgendwoher kommen muss und ich das nur hinbekomme, wenn ich den Wert in einer globalen Variable führe. Zwischen zwei Aufrufen der Funktion muss der Wert halt irgendwo gespeichert bleiben. In sofern funktioniert es nicht, dass der Wert erst in der Funktion jedesmal neu initialisiert wird.
Meine Frage ist: gibt es einen besseren Weg, dies zu tun? Globale Variablen soll man ja möglichst vermeiden und ich möchte gerne herausfinden, wie das ein Profi machen würde.
Natürlich kann man den Wert (STARTZEIT) auch immer wieder über lokale Variablen an die Funktion übergeben und den (ggf) neuen Wert über return(STARTZEIT) rausholen. Allerdings sagt mir mein Bauchgefühl, das geht bestimmt eleganter, nur reichen meine Python-Skills (noch) nicht so weit. Über diesen Punkt komme ich im Moment irgendwie nicht hinweg.
Das mit Objektorientierung hab ich noch nicht so ganz geschnallt aber wenn das der bessere Weg ist, wäre ich für ein paar Hinweise dankbar...
Ich hoffe, ich konnte mein Problem verständlich beschreiben ::)
import time
STARTZEIT = time.time()
def main():
while True:
print("time ", time.time())
machwas()
time.sleep(0.1)
def machwas():
global STARTZEIT # <- das will ich eigentlich vermeiden
if (time.time() - STARTZEIT) >= 1: # alle 1s
print("Timeout um", time.time())
STARTZEIT = time.time()
#Zauberei----------------------------
if __name__ == "__main__":
main()
Display More