📂 Dateien dieser Einheit:
1. Warum funktionale Idiome in Python?
In Python gibt es oft zwei Wege, eine Aufgabe zu lösen: Den langen, imperativen Weg mit vielen Hilfsvariablen und verschachtelten Schleifen – oder den eleganten, funktionalen Weg (Pythonic Code).
🏭 Die automatisierte Fließband-Analogie:
Stelle dir eine moderne Fertigungsstraße vor:
enumerate()(Die Etikettierstation): Klebt an jedes Teil automatisch die aktuelle Positionsnummer.zip()(Die Fügestation): Bringt Bauteile von zwei parallelen Fließbändern paarweise zusammen.filter()(Die Qualitätsweiche): Lässt nur Bauteile passieren, die ein Prüfkriterium erfüllen.map()(Die Veredelungsstation): Wendet eine Transformation auf jedes durchlaufende Teil an.all()/any()(Die Sensorüberwachung): Meldet sofort, ob alle Teile fehlerfrei sind oder mindestens ein Alarm anliegt.
2. Cheat-Sheet: Funktionale Idiome auf einen Blick
| Funktion / Idiom | Zweck | Typisches Code-Beispiel | Ergebnis |
|---|---|---|---|
enumerate(l, start) |
Iteriert gleichzeitig über Index und Element. | [f"{i}. {x}" for i, x in enumerate(["A","B"], 1)] |
['1. A', '2. B'] |
zip(a, b) |
Verknüpft mehrere Sequenzen paarweise. | dict(zip(["Name", "Alter"], ["Max", 25])) |
{'Name': 'Max', 'Alter': 25} |
lambda x: ... |
Anonyme Mini-Funktion als Einzeiler. | verdoppeln = lambda x: x * 2 |
verdoppeln(5) → 10 |
map(f, iter) |
Wendet Funktion f auf alle Elemente an. |
list(map(lambda x: x**2, [1, 2, 3])) |
[1, 4, 9] |
filter(p, iter) |
Filtert Elemente nach Prädikat p. |
list(filter(lambda x: x > 0, [-2, 0, 5])) |
[5] |
sorted(..., key=...) |
Sortiert nach beliebigem Schlüssel (Lambda). | sorted(user, key=lambda u: u["alter"]) |
Sortierte Liste |
all(iter) |
Gibt True, wenn ALLE Elemente wahr sind. |
all(x >= 18 for x in [20, 25, 18]) |
True |
any(iter) |
Gibt True, wenn MINDESTENS EIN Element wahr ist. |
any(x == 0 for x in [1, 2, 0, 4]) |
True |
3. 📋 Deine Aufgaben-Checkliste
Öffne die Datei aufgabe.py und löse die 6 Kern-Aufgaben:
💡 Lösungshinweise (Aufklappen bei Bedarf)
🔍 Tipp zu TODO 3: Map & Filter verketten
Du kannst filter() direkt in map() schachteln und mit list() materialisieren:
return list(map(lambda x: x ** 2, filter(lambda x: x % 2 != 0, zahlen)))
🔍 Tipp zu TODO 4: Sortieren mit Lambda-Key
Nutze den key-Parameter von sorted():
return sorted(personen, key=lambda p: p["alter"], reverse=absteigend)
4. 🧪 Lösung überprüfen & Testen
1. Automatische Tests ausführen:
Terminal (im Ordner 18_funktionale_programmierung_lambda)
python3 test_aufgabe.py
2. Interaktives Skript starten:
Terminal
python3 aufgabe.py