Dies ist eine alte Version des Dokuments!
LU07.A08 - Vorgegebene Massnahmen umsetzen
Setzen Sie vier vorgegebene Performance-Massnahmen um und belegen Sie jede mit einer Messung vorher und nachher.
Ausgangslage
import random random.seed(42) gesperrt = [f"user{i}" for i in range(10000)] anfragen = [f"user{random.randrange(20000)}" for _ in range(2000)] kunden = [{"id": i, "name": f"K{i}"} for i in range(2000)] bestellungen = [{"kunde_id": random.randrange(2000), "betrag": 10} for _ in range(2000)]
Massnahme 1
def gesperrte_anfragen(anfragen, gesperrt): return sum(1 for a in anfragen if a in gesperrt)
Vorgabe: Ersetzen Sie die Datenstruktur für gesperrt.
Massnahme 2
def zuordnen(bestellungen, kunden): out = [] for b in bestellungen: for k in kunden: if k["id"] == b["kunde_id"]: out.append((k["name"], b["betrag"])) break return out
Vorgabe: Ersetzen Sie die innere Schleife durch einen Index.
Massnahme 3
def fibonacci(n): return n if n < 2 else fibonacci(n - 1) + fibonacci(n - 2)
Vorgabe: Setzen Sie Memoization ein.
Massnahme 4
def top_drei_pro_kunde(kunden, produkte): ergebnis = {} for k in kunden: top = sorted(produkte, key=lambda p: p["preis"])[:3] ergebnis[k["name"]] = [p["name"] for p in top] return ergebnis
Vorgabe: Ziehen Sie unveränderliche Arbeit aus der Schleife heraus.
Detaillierte Aufgabenstellung
- Setzen Sie die Massnahme um.
- Prüfen Sie mit
assert alt(…) == neu(…), dass das Ergebnis identisch bleibt. - Messen Sie nach und halten Sie beide Zahlen sowie den Faktor fest.
- Notieren Sie zu jeder Massnahme in einem Satz: Warum ist die neue Fassung schneller?
