Viele Python-Einsteiger sind mit dem Schreiben von if
, elif
, else
Bedingungen vertraut, aber wenn der Code immer länger und verschachtelter wird, leidet die Lesbarkeit. Python, als Sprache, die "lesbaren Code" anstrebt, bietet verschiedene Möglichkeiten, Bedingungen wesentlich eleganter und prägnanter auszudrücken.
In diesem Artikel werden Tipps und Beispiele vorgestellt, um von traditionellen Bedingungen abzuweichen und Bedingungszweige pythonisch zu handhaben.
1. Bedingter Ausdruck (Conditional Expression, aka ternärer Operator)
status = "Erwachsener" if age >= 18 else "Minderjähriger"
- Einzeilige
if/else
Ausdrücke sind möglich - Allerdings sollte die verschachtelte Verwendung vermieden werden (Verschlechterung der Lesbarkeit)
2. Nutzung von Truthy / Falsy Werten
if items:
print("Die Liste enthält Elemente.")
In Python werden folgende Werte in Bedingungen als False
bewertet:
- Leere Container ([]
, {}
, ''
)
- Die Zahl 0 (0
, 0.0
)
- None
Alle anderen Werte gelten als True
, weshalb der obige Code gültig ist.
Neulinge schreiben oft folgenden Code:
if len(items) > 0:
print("Die Liste enthält Elemente.")
In Python wird jedoch len(items)
als False bewertet, wenn es 0 ist, und als True, wenn es 1 oder mehr ist, weshalb der obige Code einfach auf if items:
reduziert werden kann.
Diese Methode vereint Lesbarkeit, Kürze und pythonischen Code-Stil. Allerdings empfiehlt es sich, bei zu vielem Weglassen, das die Absicht unklar macht, Kommentare hinzuzufügen.
3. Guard Clause zur Reduzierung von Verschachtelungen
def process(user):
if not user.is_active:
return "Inaktiver Benutzer."
# Folgende Logik
- Statt Codeblöcke innerhalb von
if
zu verschachteln, schnell zurückkehren oder beenden - Wenn die Bedingung nicht erfüllt ist, sofortaussteigen (early return)
4. Ersetzen von Bedingungszweigen durch ein Dictionary
def get_status(code):
return {
200: "OK",
404: "Nicht Gefunden",
500: "Serverfehler"
}.get(code, "Unbekannt")
- Verbesserung der Lesbarkeit mit
dict
Mapping anstelle vonif-elif
- Verwendung von
.get()
zur Festlegung von Standardwerten möglich
5. Reduzierung komplexer Bedingungen mit any()
/ all()
if any([is_admin, is_staff, is_moderator]):
grant_access()
- Wenn mindestens eine der Bedingungen True ist →
any()
- Wenn alle Bedingungen True sein müssen →
all()
6. Verwendung des or
Operators zur Verarbeitung von Standardwerten
Der or
Operator in Python gibt den rechten Wert zurück, wenn der linke Wert als False bewertet wird. Mit dieser Eigenschaft kann ein Standardwert elegant angegeben werden:
username = input("Bitte geben Sie Ihren Namen ein: ") or "Kein Name"
Oder wenn der Rückgabewert einer Funktion leer sein könnte, kann ebenfalls ein Fallback-Wert auf natürliche Weise angegeben werden:
items = get_items() or ["Standardelement"]
Diese Methode ist sehr nützlich, da sie ohne Bedingungen Kurz und intuitiv alternative Werte bereitstellt.
🔍 Beim Zugriff auf Dictionaries ist
.get('key', 'default')
sicher, da es die Existenz des Schlüssels prüft und den Standardwert zurückgibt. Deror
hingegen ist für den Umgang mit gewöhnlichen Variablen oder Rückgabewerten von Funktionen besser geeignet, um Fallbacks eleganter zu behandeln.
7. Musterabgleich (match-case
) - Python 3.10+
def handle_error(code):
match code:
case 400:
return "Ungültige Anfrage"
case 404:
return "Nicht Gefunden"
case _:
return "Unbekannter Fehler"
- Ab Python 3.10 verfügbar
- Ersetzt switch-case und ermöglicht auch Destrukturierung
Fazit
Durch die Vereinfachung von Bedingungen kann die Lesbarkeit und Wartbarkeit des Codes erheblich verbessert werden. Der pythonische Stil zielt nicht nur darauf ab, die Zeilenanzahl zu reduzieren, sondern auch, die Absicht klar zu vermitteln.
Wenn Sie in Zukunft beim Schreiben von Bedingungen die obigen Beispiele schrittweise anwenden, werden Sie auf natürliche Weise eleganteren Code schreiben können.
Einfach ist besser als komplex. — aus The Zen of Python
Es sind keine Kommentare vorhanden.