Python funktionale Programmierung: Konzepte einfach erklärt
Was ist funktionale Programmierung in Python? Reine Funktionen, map & filter einfach erklärt – für den Einstieg in sauberen, klaren Code.
By Marcel Schmidtpeter 25 Sept 2026
Stell dir vor, du sitzt im Programmier-Praktikum und deine Ausbilderin zeigt dir ihren Code: keine einzige `for`-Schleife, aber Zeilen wie `list(map(lambda x: x * 1.19, preise))`. Willkommen in der Welt der funktionalen Programmierung in Python - ein Konzept, das dir in der Berufsschule, im Studium und später in fast jedem Python-Projekt begegnet. Die gute Nachricht: Die Grundidee dahinter ist einfacher, als sie aussieht.
Was ist funktionale Programmierung in Python?
Funktionale Programmierung ist ein Programmierstil, bei dem du Programme aus Funktionen zusammensetzt - ähnlich wie du einen Satz aus Wörtern baust. Das klingt erstmal banal, denn Funktionen kennst du schon. Der Unterschied: In der funktionalen Programmierung sind Funktionen die wichtigsten Bausteine. Sie werden wie Werte behandelt, sollten berechenbar sein und Daten nicht heimlich verändern.
Python ist keine reine funktionale Sprache, sondern eine Multiparadigmen-Sprache - du kannst objektorientiert, prozedural oder funktional schreiben. Meist mischt man alles. Die offizielle Python-Dokumentation beschreibt diese Konzepte ausführlich, wenn du tiefer einsteigen willst.
Merke: Funktionale Programmierung in Python heißt nicht, keine Schleifen mehr zu schreiben. Es heißt, Funktionen als Werkzeuge zu nutzen, die Daten verarbeiten, ohne Überraschungen zu erzeugen.
Funktionen sind Werte: First-Class Functions
In Python sind Funktionen First-Class-Objekte - du kannst sie einer Variable zuweisen, als Argument weiterreichen und aus anderen Funktionen zurückgeben. Stell dir eine Funktion wie eine Speisekarte vor: Sie ist nicht nur etwas, das du bestellst, sondern etwas, das du auch weitergeben kannst.
def gruss(name):
return f"Hallo, {name}!"
begruessung = gruss # Funktion wird einer Variable zugewiesen
print(begruessung("Anna")) # Ausgabe: Hallo, Anna!Warum ist das wichtig? Weil du so kleine Hilfsfunktionen flexibel kombinieren kannst - zum Beispiel bei `sorted()` mit dem `key`-Argument. Das Konzept nutzen auch Decorators, die dir früher oder später begegnen werden.
Reine Funktionen: Vorhersehbar wie ein Taschenrechner
Eine reine Funktion (Pure Function) liefert bei gleichem Input immer den gleichen Output - und verändert nichts außerhalb von sich. Wie ein Taschenrechner: `2 + 3` ergibt immer `5`, egal wie oft du rechnest, und der Taschenrechner löscht dabei nicht heimlich deine Notizen.
# Nicht rein: Seiteneffekt - veraendert die urspruengliche Liste
def rabatte_hinzufuegen(preise):
for i in range(len(preise)):
preise[i] = preise[i] * 0.9
return preise
# Rein: gibt eine neue Liste zurueck, laesst das Original unberuehrt
def rabatte_berechnen(preise):
return [p * 0.9 for p in preise]Ein Seiteneffekt ist jede Veränderung außerhalb der Funktion: Dateien schreiben, globale Variablen ändern, Ausgaben printen. Seiteneffekte sind nicht schlecht - ohne sie könnte dein Programm nichts Sinnvolles tun. Aber je weniger davon in deinen Rechenfunktionen stecken, desto einfacher kannst du den Code testen und Fehler finden.
Merke: Reine Funktionen sind leichter zu testen, weil du nur Input und Output prüfen musst - nicht den gesamten Zustand deines Programms.
Higher-Order Functions: Wie funktionieren map, filter und reduce?
Eine Higher-Order Function ist eine Funktion, die andere Funktionen als Argument bekommt oder zurückgibt. Die drei Klassiker in Python:
Funktion | Was sie macht | Analogie |
`map(f, liste)` | Wendet `f` auf jedes Element an | Ein Stempel, der jedes Blatt bedruckt |
`filter(f, liste)` | Behält nur Elemente, für die `f` wahr ist | Ein Sieb, das nur die Teile durchlässt, die du behalten willst |
`reduce(f, liste)` | Reduziert alles auf einen Wert | Ein Schneeball, der alles aufrollt |
from functools import reduce
preise = [19.99, 5.50, 120.00, 3.20]
inkl_mwst = list(map(lambda p: round(p * 1.19, 2), preise))
teure = list(filter(lambda p: p > 15, inkl_mwst))
gesamt = reduce(lambda a, b: a + b, teure, 0)
print(gesamt) # Ausgabe: 166.59Eine Lambda-Funktion ist eine kleine, anonyme Funktion ohne Namen - mehr dazu im Artikel zur Python Lambda Funktion. `reduce` wohnt im Modul `functools` und muss importiert werden - in Python 2 war es noch eingebaut, in Python 3 nicht mehr.
Merke: Auch `sorted(namen, key=len)` ist eine Higher-Order Function - sie nimmt eine Funktion (`len`) als Argument entgegen. Dir begegnen sie öfter, als du denkst.
Ehrlicher Hinweis: In der Praxis ersetzen List Comprehensions `map` und `filter` oft, weil sie lesbarer sind. `map` und `filter` zeigen dir aber das zugrunde liegende Konzept - und das brauchst du auch für Pandas, Spark oder LINQ in C#, falls du später mit solchen Bibliotheken arbeitest.
Praxisbeispiel: Noten auswerten ohne eine einzige Schleife
Hier ein komplettes Beispiel, wie du in einer Berufsschul-App Prüfungsergebnisse funktional auswertest:
from functools import reduce
noten = [
{"name": "Anna", "punkte": 82},
{"name": "Ben", "punkte": 45},
{"name": "Cem", "punkte": 91},
{"name": "Dana", "punkte": 58},
]
# 1. Reine Funktion: Note berechnen
def note_aus_punkten(punkte):
if punkte >= 90:
return 1
if punkte >= 70:
return 2
if punkte >= 50:
return 3
return 4
# 2. Bestanden: alle mit mindestens 50 Punkten
bestanden = list(filter(lambda s: s["punkte"] >= 50, noten))
# 3. Alle Ergebnisse als Liste von Tupeln
ergebnisse = list(
map(lambda s: (s["name"], note_aus_punkten(s["punkte"])), bestanden)
)
# 4. Durchschnittspunkte der Bestandenen
durchschnitt = reduce(lambda summe, s: summe + s["punkte"], bestanden, 0) / len(
bestanden
)
print(ergebnisse) # [('Anna', 2), ('Cem', 1), ('Dana', 3)]
print(round(durchschnitt, 1)) # 77.0Jeder Schritt macht genau eine Sache, und die Original-Liste `noten` bleibt unverändert. Genau das ist der praktische Vorteil: Du kannst jeden Schritt einzeln testen und in beliebiger Reihenfolge kombinieren.
Häufige Fehler, die Anfänger machen
Funktionale Konzepte haben ihre Stolpersteine - diese drei begegnen Einsteigern am häufigsten:
1. Das map-Objekt vergessen. `map()` gibt keine Liste zurück, sondern ein Map-Objekt - einen Iterator, den du nur einmal durchlaufen kannst. Ohne `list()` gibt `print(map(...))` nur etwas wie `<map object at 0x...>` aus.
# Falsch
ergebnis = map(lambda x: x * 2, [1, 2, 3])
print(ergebnis) # <map object at 0x7f...>
# Richtig
ergebnis = list(map(lambda x: x * 2, [1, 2, 3]))
print(ergebnis) # [2, 4, 6]2. Lambda-Funktionen überladen. Lambdas sind für Mini-Logik gedacht. Sobald du mehrere Zeilen brauchst oder der Lambda komplex wird, nimm eine normale `def`-Funktion mit sprechendem Namen - dein Ich in drei Monaten dankt dir. Auch der Python-Styleguide PEP 8 rät davon ab, Lambdas an Namen zuzuweisen.
3. Seiteneffekte in map/filter verstecken. Wenn deine Lambda-Funktion plötzlich Dateien schreibt oder Variablen verändert, zerstörst du den größten Vorteil des Stils: die Vorhersagbarkeit. Bleib bei reinen Berechnungen.
Übungstipp: Refactore deine alten Schleifen
Nimm dir ein eigenes Projekt oder eine alte Hausaufgabe und suche drei `for`-Schleifen, die eine Liste befüllen. Schreibe jede davon als List Comprehension und einmal mit `map` oder `filter`. Vergleiche danach: Welche Variante verstehst du schneller, wenn du den Code eine Woche nicht angefasst hast? Diese Übung trainiert genau das Gespür, das Prüfer und Ausbilder gerne sehen - und sie dauert nur 15 Minuten.
FAQ: Häufige Fragen zur funktionalen Programmierung in Python
Ist Python eine funktionale Programmiersprache?
Nein. Python ist eine Multiparadigmen-Sprache und unterstützt funktionale Konzepte wie First-Class Functions, `map`, `filter` und `reduce`, aber erzwingt sie nicht. Reine funktionale Sprachen sind z. B. Haskell oder Erlang.
Brauche ich funktionale Programmierung als Anfänger?
Für die Grundlagen nicht, aber sie begegnet dir schnell - bei `sorted(..., key=...)`, List Comprehensions, Decorators oder Bibliotheken wie Pandas. Die Kernideen solltest du früher verstehen als später.
Was ist der Unterschied zwischen map und List Comprehension?
Beide wandeln jedes Element um. `map` ist kompakter bei einer bestehenden Funktion, List Comprehensions sind flexibler und für die meisten Python-Entwickler lesbarer. Performance-Unterschiede sind in der Praxis meist vernachlässigbar.
Was sind reine Funktionen einfach erklärt?
Reine Funktionen liefern bei gleichem Input immer den gleichen Output und haben keine Seiteneffekte - sie verändern also keine Daten außerhalb ihrer selbst.
Passt funktionale Programmierung zur objektorientierten Programmierung?
Ja, beides kombinierst du ständig. Typisch: Klassen organisieren deine Daten und Struktur (OOP-Grundlagen hier), während funktionale Konzepte die Verarbeitung innerhalb der Methoden übernehmen.
Fazit
Funktionale Programmierung in Python bedeutet: Funktionen als Werte behandeln, reine Funktionen bevorzugen und Daten mit `map`, `filter` und `reduce` bzw. List Comprehensions verarbeiten, statt alles mit Schleifen und Mutationen zu lösen. Du musst nicht sofort jeden Code funktional schreiben - aber wenn du die Konzepte kennst, verstehst du fremden Code schneller und schreibst testbarere eigene Programme.
Wenn du bei Python-Themen wie diesem gerade für eine Prüfung lernst oder in deinem Studium hängst: Bei study-it.education findest du persönliche IT-Nachhilfe, die genau da ansetzt, wo du gerade stehst - egal ob Azubi, Student oder Quereinsteiger. Schau vorbei und mach aus „Das verstehe ich nicht" ein „Das kann ich."
Need someone to walk through this with you?
Instead of re-reading: 30 min with a senior dev.
Book a free first chat →
Was ist funktionale Programmierung in Python? Reine Funktionen, map & filter einfach erklärt – für den Einstieg in sauberen, klaren Code.
marcel.schmidtpeter@study-it.education →More reading
Python HTTP requests senden: GET, POST & mehr mit requests
So sendest du mit der Python-Bibliothek requests GET- und POST-Anfragen an APIs – mit Beispielen für Azubis, Studenten und Berufseinsteiger.
Python JSON verarbeiten mit dem -Modul – einfach erklärt
JSON in Python lesen und schreiben? Das -Modul macht's einfach – von .loads bis .dumps, hier lernst du alles Wichtige.
Python Datenbank verbinden: sqlite3 & SQLAlchemy einfach erklärt
Erfahre, wie du Python per sqlite3 oder SQLAlchemy mit Datenbanken verbindest – mit Praxisbeispielen für Azubis, Studenten & Berufseinsteiger.