Zum Inhalt springen

Vertiefung 6 - Erweiterte Programmierkonzepte

Schritt 1 von 7

In diesem Schritt werden wir uns mit erweiterten Programmierkonzepten auseinandersetzen, die es uns ermöglichen, komplexere Programme zu erstellen. Ein wichtiger Aspekt dabei sind Generatoren, die es ermöglichen, Werte sequencesweise zu erzeugen, ohne dass diese vollständig im Speicher gehalten werden müssen. Generatoren können durch die Verwendung des Schlüsselworts yield definiert werden. Ein Beispiel für einen Generator wäre ein Fibonacci-Generator, der die Fibonacci-Folge erzeugt:

def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
 
# Um den Generator zu verwenden, können wir ihn in einer Schleife verwenden:
fib = fibonacci()
for _ in range(10):
print(next(fib))

Diese Implementierung des Fibonacci-Generators ermöglicht es uns, die ersten 10 Zahlen der Fibonacci-Folge zu drucken, ohne dass wir diese Zahlen im Voraus berechnen und speichern müssen. Ein weiterer wichtiger Aspekt sind Dekoratoren, die es ermöglichen, bestehende Funktionen zu modifizieren oder zu erweitern, ohne dass wir den ursprünglichen Code ändern müssen. Dekoratoren werden durch die Verwendung des Schlüsselworts @ definiert. Ein Beispiel für einen Dekorator wäre ein Timer-Dekorator, der die Ausführungszeit einer Funktion misst:

import time
 
def timer_decorator(func):
def wrapper():
start_time = time.time()
func()
end_time = time.time()
print(f"Zeit: {end_time - start_time} Sekunden")
return wrapper
 
@timer_decorator
def meine_funktion():
time.sleep(2)
 
meine_funktion()

Diese Implementierung des Timer-Dekorators ermöglicht es uns, die Ausführungszeit der Funktion meine_funktion zu messen, ohne dass wir den ursprünglichen Code ändern müssen.