While-Schleife für eine bestimmte Zeit lang ausführen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

ProgrammierLord hat geschrieben:und wie muss ich dann duration eingeben? Einfach die Zahl oder anders?
Die Anzahl in Sekunden. Bei dir also zum Beispiel 30.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

ProgrammierLord hat geschrieben:@snafu: Und wie kann ich das jetzt in die While-Schleife einmeddeln?
Entweder `repeated_call` direkt aufrufen und die gewünschte Funktion übergeben (wobei ich bei der Funktionsübergabe bereits deine nächsten Probleme erwarte) oder den Code aus `repeated_call` übernehmen und in der Zeile, wo ``func()`` steht, die echte Funktion einsetzen. Im Falle der Codeübernahme müsstest du die `duration` dann natürlich auch direkt ersetzen bzw vorab ein ``duration = 30`` oder so machen.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hier ist übrigens auch der Einsatz als Dekorator denkbar. Sinnfreies Beispiel:

Code: Alles auswählen

from __future__ import print_function
from functools import wraps
from time import sleep, time

def repeated_call(duration):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            stop = time() + duration
            while time() < stop:
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeated_call(duration=5)
def repeated_hello(name):
    print('Hello', name)
    sleep(0.5)

if __name__ == '__main__':
    repeated_hello('World')
...ist letztlich aber nicht mehr als eine Spielerei. Soviel Code für eine simple Schleife ist geradezu Javaesk. ;)
Antworten