import time def task1(): print('Task 1 executed!') def task2(): print('Task 2 executed!') def task_scheduler(tasks, delay): for task in tasks: task() time.sleep(delay) if __name__ == '__main__': tasks = [task1, task2] delay = 2 task_scheduler(tasks, delay)
def task_scheduler_expert(tasks, delays): for task, delay in zip(tasks, delays): task() time.sleep(delay) if __name__ == '__main__': tasks = [task1, task2] delays = [2,3] task_scheduler_expert(tasks, delays)
task_scheduler
-Funktion wird so geändert, dass sie eine Liste von Verzögerungen akzeptiert, wobei jede Verzögerung einem bestimmten Task entspricht.zip
-Funktion wird verwendet, um die Tasks und Verzögerungen in der for
-Schleife zu verbinden. Die zip
-Funktion verbindet die beiden Listen (Tasks und Verzögerungen) so, dass sie als Paare verarbeitet werden können. Für jeden Durchlauf der Schleife wird ein Task und die entsprechende Verzögerung aus den beiden Listen entnommen und ausgeführt.Diese Musterlösungen zeigen die Flexibilität von First-Class Functions in Python und wie man verschiedene Verzögerungen in der Ausführung von Code hinzufügen kann.
Exkurs zur ZIP-Funktion
Die zip
-Funktion kombiniert die Elemente mehrerer Iterables (wie Listen oder Tupel) und gibt einen Iterator von Tupeln zurück, wobei das erste Element in jedem Argument das erste Element im ersten Tupel usw. ist. Im obigen Beispiel würde die Verwendung von zip
mit den Listen tasks
und delays
zu einem Iterator führen, der die folgenden Tupel enthält:
(<function task1 at 0x10044d1b0>, 1) (<function task2 at 0x10044d900>, 3)
Wenn du diesen Iterator in eine Liste umwandeln möchtest, kannst du die list
-Funktion verwenden. Zum Beispiel:
tasks = [task1, task2] delays = [1, 3] zipped_list = list(zip(tasks, delays)) # zipped_list wäre nun: [(<function task1 at 0x10044d1b0>, 1), (<function task2 at 0x10044d900>, 3)]
Natürlich kann zip
auch für andere Datentypen verwendet werden:
# Definieren von zwei Listen names = ['Alice', 'Bob', 'Charlie'] ages = [25, 30, 22] # Verknüfen von zwei Listen in eine neue Liste von Tuples zipped_list = list(zip(names, ages)) # zipped_list wäre nun: [('Alice', 25), ('Bob', 30), ('Charlie', 22)] # Verwenden der zip-Funktion, um die Listen zu kombinieren und direkt mit dem Iterator zu interieren for name, age in zip(names, ages): print(f'{name} is {age} years old')
Führt zur Ausgabe:
Alice is 25 years old Bob is 30 years old Charlie is 22 years old