10. Bedingte Ausdrücke verwenden (if-else-Ausdrücke)
In Kapitel 8 haben wir gelernt, wie wir in unseren Programmen Entscheidungen mit if-Anweisungen treffen. Diese Anweisungen erlauben es uns, abhängig von Bedingungen unterschiedliche Codeblöcke auszuführen. Manchmal müssen wir jedoch zwischen zwei Werten statt zwischen zwei Codeblöcken wählen. Python bietet für diese häufige Situation eine spezielle Syntax: bedingte Ausdrücke.
Bedingte Ausdrücke (in anderen Sprachen auch ternäre Ausdrücke oder der ternäre Operator genannt) erlauben es uns, kompakten Entscheidungscode zu schreiben, wenn wir einfach abhängig von einer Bedingung einen Wert oder einen anderen auswählen müssen. Sie sind besonders nützlich für Zuweisungen und beim Aufbau größerer Ausdrücke.
10.1) Was bedingte Ausdrücke sind
Ein bedingter Ausdruck ist ein einzelner Ausdruck, der abhängig von einer Bedingung zu einem von zwei Werten ausgewertet wird. Anders als eine if-Anweisung, die steuert, welcher Codeblock ausgeführt wird, liefert ein bedingter Ausdruck einen Wert, der sofort verwendet werden kann.
Schauen wir uns ein häufiges Szenario an. Angenommen, wir schreiben ein Programm, um Schülerinnen und Schüler nach Alter zu kategorisieren:
# Verwendung einer if-Anweisung (das, was wir bereits kennen)
age = 16
if age >= 18:
category = "adult"
else:
category = "minor"
print(f"Category: {category}") # Output: Category: minorDas funktioniert perfekt, aber beachten Sie, dass wir eigentlich nur zwischen zwei String-Werten wählen. Die Struktur ist für eine so einfache Entscheidung etwas ausführlich. Hier ist dieselbe Logik mit einem bedingten Ausdruck:
# Verwendung eines bedingten Ausdrucks
age = 16
category = "adult" if age >= 18 else "minor"
print(f"Category: {category}") # Output: Category: minorBeide Versionen liefern identische Ergebnisse, aber der bedingte Ausdruck ist kompakter. Er weist category direkt abhängig von der Bedingung einen von zwei Werten zu.
Den grundlegenden Unterschied verstehen
Der entscheidende Unterschied ist, dass bedingte Ausdrücke Ausdrücke sind und keine Anweisungen:
- Ein Ausdruck ist etwas, das zu einem Wert ausgewertet wird. Sie können ihn überall dort verwenden, wo ein Wert erwartet wird: bei Zuweisungen, als Funktionsargumente, innerhalb anderer Ausdrücke usw.
- Eine Anweisung ist eine vollständige Instruktion, die eine Aktion ausführt, aber keinen Wert liefert.
# Das ist ein Ausdruck – er liefert einen Wert
result = 10 if True else 20
# Das ist eine Anweisung – sie führt Aktionen aus, ist aber selbst kein Wert
if True:
result = 10
else:
result = 20Weil bedingte Ausdrücke Werte liefern, sind sie in bestimmten Situationen flexibler. Das bedeutet jedoch nicht, dass sie immer besser sind—wir werden später in diesem Kapitel untersuchen, wann Sie welchen Ansatz verwenden sollten.
10.2) Syntax des if–else-Ausdrucks
Die Syntax eines bedingten Ausdrucks folgt diesem Muster:
value_if_true if condition else value_if_falseSchlüsseln wir jede Komponente auf:
value_if_true: Der Ausdruck, der ausgewertet und zurückgegeben wird, wenn die BedingungTrueistif: Das Schlüsselwort, das die Bedingung einleitetcondition: Ein boolescher Ausdruck, der bestimmt, welcher Wert zurückgegeben wirdelse: Das Schlüsselwort, das den alternativen Wert einleitetvalue_if_false: Der Ausdruck, der ausgewertet und zurückgegeben wird, wenn die BedingungFalseist
Beachten Sie, dass die Reihenfolge ungewöhnlich wirken kann, wenn Sie mit anderen Programmiersprachen vertraut sind. In Python kommt der „True“-Wert zuerst, dann die Bedingung, dann der „False“-Wert. Diese Reihenfolge liest sich ein wenig wie natürliches Englisch: „Gib mir X, wenn die Bedingung wahr ist, sonst gib mir Y.“
Schauen wir uns mehrere Beispiele mit unterschiedlichen Werttypen an:
# Beispiel 1: Zwischen Zahlen wählen
temperature = 25
comfort_level = "warm" if temperature > 20 else "cool"
print(comfort_level) # Output: warm
# Beispiel 2: Zwischen Berechnungen wählen
score = 85
bonus = 10 if score >= 90 else 5
print(f"Bonus points: {bonus}") # Output: Bonus points: 5
# Beispiel 3: Zwischen booleschen Werten wählen
has_permission = True
access = "granted" if has_permission else "denied"
print(f"Access: {access}") # Output: Access: granted
# Beispiel 4: Die Bedingung kann ein beliebiger boolescher Ausdruck sein
username = "admin"
role = "administrator" if username == "admin" else "regular user"
print(f"Role: {role}") # Output: Role: administratorWichtige Hinweise zur Syntax
Der else-Teil ist in einem bedingten Ausdruck zwingend erforderlich. Anders als bei einer if-Anweisung, bei der else optional ist, müssen Sie beide Alternativen angeben:
# Das ist UNGÜLTIG – else fehlt
# result = "yes" if True # SyntaxError
# Das ist GÜLTIG – beide Zweige sind angegeben
result = "yes" if True else "no"Diese Anforderung ist sinnvoll, weil ein Ausdruck immer einen Wert liefern muss. Wenn die Bedingung False ist und es keine else-Klausel gibt, welchen Wert soll der Ausdruck dann liefern? Python verlangt, dass Sie beide Möglichkeiten explizit angeben.
10.3) Wie bedingte Ausdrücke ausgewertet werden
Wenn Sie verstehen, wie Python bedingte Ausdrücke auswertet, können Sie korrekten Code schreiben und vorhersagen, was Ihre Programme tun werden. Die Auswertung folgt einer bestimmten, vorhersagbaren Abfolge.
Der Auswertungsprozess
Python wertet einen bedingten Ausdruck in dieser Reihenfolge aus:
- Bedingung auswerten (der boolesche Ausdruck nach
if) - Abhängig vom Ergebnis:
- Wenn die Bedingung
Trueist,value_if_trueauswerten und zurückgeben - Wenn die Bedingung
Falseist,value_if_falseauswerten und zurückgeben
- Wenn die Bedingung
Entscheidend ist, dass Python nur einen der beiden Wertausdrücke auswertet, nicht beide. Das nennt man Kurzschlussauswertung (short-circuit evaluation) und es ist ähnlich dazu, wie die Operatoren and und or funktionieren (die wir in Kapitel 9 kennengelernt haben).
# Nur der relevante Zweig wird ausgewertet
x = 10
result = x * 2 if x > 5 else x / 2
# Da x > 5 True ist, wertet Python x * 2 aus (ergibt 20)
# und wertet x / 2 nie aus
print(result) # Output: 20Warum Kurzschlussauswertung wichtig ist
Kurzschlussauswertung kann Fehler verhindern und die Effizienz verbessern:
# Beispiel 1: Division durch null vermeiden
denominator = 0
result = "undefined" if denominator == 0 else 100 / denominator
print(result) # Output: undefined
# Die Division 100 / denominator wird nie versucht, weil
# die Bedingung True ist, daher vermeiden wir einen ZeroDivisionError# Beispiel 2: Operationen auf None vermeiden
data = None
length = 0 if data is None else len(data)
print(length) # Output: 0
# len(data) wird nie aufgerufen, weil data None ist,
# wodurch ein TypeError vermieden wirdTruthiness in bedingten Ausdrücken
Wie bei if-Anweisungen (Kapitel 8) verwendet die Bedingung in einem bedingten Ausdruck Pythons Truthiness-Regeln. Jeder Wert kann als Bedingung verwendet werden:
# Leerer String ist falsy
name = ""
greeting = f"Hello, {name}" if name else "Hello, guest"
print(greeting) # Output: Hello, guest
# Nicht-leerer String ist truthy
name = "Alice"
greeting = f"Hello, {name}" if name else "Hello, guest"
print(greeting) # Output: Hello, Alice
# Null ist falsy, Nicht-Null ist truthy
items = 0
message = "You have items" if items else "Your cart is empty"
print(message) # Output: Your cart is empty
items = 3
message = "You have items" if items else "Your cart is empty"
print(message) # Output: You have itemsVerschachtelte Auswertung
Die Werte in einem bedingten Ausdruck können selbst Ausdrücke sein, einschließlich anderer bedingter Ausdrücke. Python wertet diese von innen nach außen aus:
# Der value_if_true ist selbst eine Berechnung
age = 25
price = age * 2 if age < 18 else age * 3
print(price) # Output: 75
# Schritte: age < 18 → False → age * 3 auswerten → 75
# Die Bedingung ist ein komplexer Ausdruck
score = 85
grade = 90
status = "excellent" if score >= 80 and grade >= 85 else "good"
print(status) # Output: excellent
# Schritte: score >= 80 → True, grade >= 85 → True
# True and True → True → "excellent" zurückgeben10.4) Bedingte Ausdrücke in Zuweisungen verwenden
Eine der häufigsten Verwendungen bedingter Ausdrücke ist bei Zuweisungen, bei denen wir eine Variable abhängig von einer Bedingung auf einen von zwei Werten setzen wollen. Dieses Muster kommt in realem Code häufig vor.
Einfache Zuweisungsmuster
Schauen wir uns praktische Beispiele an, in denen bedingte Ausdrücke Zuweisungen sauberer machen:
# Beispiel 1: Einen Rabatt basierend auf der Mitgliedschaft setzen
is_member = True
discount = 0.15 if is_member else 0.05
print(f"Discount: {discount * 100}%") # Output: Discount: 15.0%
# Beispiel 2: Versandkosten bestimmen
order_total = 45.00
shipping = 0 if order_total >= 50 else 5.99
print(f"Shipping: ${shipping:.2f}") # Output: Shipping: $5.99
# Beispiel 3: Einen Standardwert setzen
user_input = "" # Leere Eingabe simulieren
page_size = int(user_input) if user_input else 10
print(f"Items per page: {page_size}") # Output: Items per page: 10Vergleich mit if-Anweisungen
Schauen wir uns dieselben Zuweisungen mit if-Anweisungen an, um den Unterschied zu sehen:
# Verwendung einer if-Anweisung (ausführlicher)
is_member = True
if is_member:
discount = 0.15
else:
discount = 0.05
# Verwendung eines bedingten Ausdrucks (kompakter)
is_member = True
discount = 0.15 if is_member else 0.05Beide Ansätze funktionieren korrekt, aber der bedingte Ausdruck ist knapper, wenn Sie einfach zwischen zwei Werten wählen. Die if-Anweisungsversion braucht vier Zeilen und wiederholt den Variablennamen discount zweimal, während der bedingte Ausdruck dasselbe in einer Zeile erledigt.
Mehrere Zuweisungen mit konsistenter Logik
Wenn Sie mehrere Zuweisungen auf Basis derselben Bedingung machen müssen, haben Sie Optionen:
# Ansatz 1: Mehrere bedingte Ausdrücke
is_premium = True
price = 99.99 if is_premium else 149.99
features = "all" if is_premium else "basic"
support = "priority" if is_premium else "standard"
# Ansatz 2: Eine if-Anweisung für mehrere Zuweisungen
is_premium = True
if is_premium:
price = 99.99
features = "all"
support = "priority"
else:
price = 149.99
features = "basic"
support = "standard"In diesem Fall ist der if-Ansatz (Ansatz 2) oft besser lesbar, weil er zusammengehörige Zuweisungen gruppiert und die Beziehung zwischen ihnen klar macht. Der Ansatz mit bedingten Ausdrücken (Ansatz 1) funktioniert, wiederholt aber dreimal die Bedingung, was schwerer zu warten sein kann, wenn sich die Bedingung ändern muss.
10.5) Bedingte Ausdrücke innerhalb größerer Ausdrücke verwenden
Weil bedingte Ausdrücke Werte liefern, können sie in größere Ausdrücke eingebettet werden. Das ermöglicht leistungsfähigen, kompakten Code, erfordert aber Sorgfalt, um die Lesbarkeit zu erhalten.
Bedingte Ausdrücke in Arithmetik
Sie können bedingte Ausdrücke als Operanden in arithmetischen Operationen verwenden:
# Bedingte Addition
base_score = 80
bonus_eligible = True
final_score = base_score + (10 if bonus_eligible else 0)
print(f"Final score: {final_score}") # Output: Final score: 90Bedingte Ausdrücke in String-Formatierung
Bedingte Ausdrücke funktionieren nahtlos mit f-Strings und anderen String-Operationen:
# Beispiel 1: Pluralbildung in Meldungen
item_count = 1
message = f"You have {item_count} {'item' if item_count == 1 else 'items'}"
print(message) # Output: You have 1 item
item_count = 3
message = f"You have {item_count} {'item' if item_count == 1 else 'items'}"
print(message) # Output: You have 3 items
# Beispiel 2: Bedingte Begrüßung basierend auf der Uhrzeit
hour = 14
greeting = f"Good {'morning' if hour < 12 else 'afternoon'}, user!"
print(greeting) # Output: Good afternoon, user!Verschachtelte bedingte Ausdrücke
Sie können bedingte Ausdrücke verschachteln, um mehrere Bedingungen zu behandeln, allerdings sollte das sparsam eingesetzt werden:
# Beispiel 1: Dreifach-Klassifizierung
score = 85
grade = "A" if score >= 90 else ("B" if score >= 80 else "C")
print(f"Grade: {grade}") # Output: Grade: B
# Gehen wir das nach:
# score >= 90? Nein (85 < 90)
# Also den else-Teil auswerten: ("B" if score >= 80 else "C")
# score >= 80? Ja (85 >= 80)
# "B" zurückgeben
# Beispiel 2: Temperatur-Klassifizierung
temp = 15
category = "hot" if temp > 25 else ("warm" if temp > 15 else "cold")
print(f"Category: {category}") # Output: Category: cold
# Beispiel 3: Altersbasierte Preise mit mehreren Stufen
age = 65
price = 0 if age < 5 else (8 if age < 18 else (12 if age < 65 else 8))
print(f"Ticket price: ${price}") # Output: Ticket price: $8Wichtiger Hinweis zur Verschachtelung: Auch wenn verschachtelte bedingte Ausdrücke möglich sind, können sie schnell schwer zu lesen werden. Das dritte Beispiel oben ist technisch korrekt, aber schwer zu verstehen. Wir besprechen bessere Alternativen in Abschnitt 10.7.
Bedingte Ausdrücke in Vergleichen
Sie können bedingte Ausdrücke innerhalb von Vergleichsoperationen verwenden:
# Beispiel 1: Vergleich mit einem bedingten Wert
base_value = 10
threshold = 15
is_large = True
result = base_value > (threshold if is_large else 5)
print(result) # Output: False
# Wird ausgewertet als: base_value > 15 → 10 > 15 → False
# Beispiel 2: Bedingter Gleichheitscheck
user_role = "admin"
required_role = "admin" if True else "user"
has_access = user_role == required_role
print(has_access) # Output: True10.6) Bedingter Ausdruck vs. if-Anweisung (Ausdruck vs. Anweisung)
Zu verstehen, wann Sie einen bedingten Ausdruck gegenüber einer if-Anweisung verwenden sollten, ist entscheidend, um klaren, wartbaren Code zu schreiben. Der Unterschied beruht auf der grundlegenden Differenz zwischen Ausdrücken und Anweisungen in Python.
Ausdrücke vs. Anweisungen: Der Kernunterschied
Lassen Sie uns diese Begriffe präzise klären:
-
Ein Ausdruck ist eine Kombination aus Werten, Variablen, Operatoren und Funktionsaufrufen, die Python auswertet, um einen Wert zu erzeugen. Beispiele:
2 + 3,"hello".upper(),x if x > 0 else 0 -
Eine Anweisung ist eine vollständige Instruktion, die eine Aktion ausführt. Anweisungen liefern keine Werte—sie tun etwas. Beispiele:
if x > 0: print("positive"),x = 5,for i in range(10): print(i)
# Das ist ein Ausdruck – er liefert einen Wert (7)
result = 3 + 4
# Das ist eine Anweisung – sie führt eine Aktion aus (gibt aus)
print("Hello")
# Ein bedingter Ausdruck ist ein Ausdruck
value = "yes" if True else "no" # Liefert "yes"
# Eine if-Anweisung ist eine Anweisung
if True:
value = "yes"
else:
value = "no"
# Führt die Zuweisung aus, aber das if selbst liefert keinen WertWann bedingte Ausdrücke verwendet werden sollten
Bedingte Ausdrücke sind ideal, wenn:
1. Sie zwischen zwei Werten für eine Zuweisung wählen:
# Gute Verwendung eines bedingten Ausdrucks
age = 16
status = "adult" if age >= 18 else "minor"
# Weniger knapp mit if-Anweisung
age = 16
if age >= 18:
status = "adult"
else:
status = "minor"2. Sie inline innerhalb eines größeren Ausdrucks einen Wert brauchen:
# Gute Verwendung – Wert wird im f-string benötigt
items = 1
print(f"You have {items} {'item' if items == 1 else 'items'}")
# Output: You have 1 item
# Umständlich mit if-Anweisung – erfordert Vorab-Zuweisung
items = 1
if items == 1:
word = "item"
else:
word = "items"
print(f"You have {items} {word}")3. Die Logik einfach ist und der Ausdruck gut lesbar bleibt:
# Gute Verwendung – einfache, klare Logik
discount = 0.15 if is_member else 0.05
max_value = a if a > b else b
sign = "positive" if x > 0 else "non-positive"Wann if-Anweisungen verwendet werden sollten
Verwenden Sie if-Anweisungen, wenn:
1. Sie in jedem Zweig mehrere Anweisungen ausführen müssen:
# Verwenden Sie eine if-Anweisung – mehrere Aktionen pro Zweig
if score >= 90:
grade = "A"
message = "Excellent work!"
bonus_points = 10
else:
grade = "B"
message = "Good job!"
bonus_points = 5
# Bedingte Ausdrücke wären hier umständlich:
# grade = "A" if score >= 90 else "B"
# message = "Excellent work!" if score >= 90 else "Good job!"
# bonus_points = 10 if score >= 90 else 5
# (Wiederholt die Bedingung unnötig)2. Sie mehr als zwei Zweige haben (elif):
# Verwenden Sie eine if-Anweisung – mehrere Zweige
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "F"
# Verschachtelte bedingte Ausdrücke werden schwer lesbar:
# grade = "A" if score >= 90 else ("B" if score >= 80 else ("C" if score >= 70 else "F"))3. Einer der Zweige nichts tun soll:
# Verwenden Sie eine if-Anweisung – else-Zweig tut nichts
if error_occurred:
print("An error occurred")
log_error(error_message)
# Kein else nötig
# Ein bedingter Ausdruck erfordert beide Zweige:
# result = handle_error() if error_occurred else None # UmständlichGegenüberstellung
Schauen wir uns dieselbe Logik in beiden Varianten an:
# Szenario: Eine Versandgebühr festlegen
# Version 1: Bedingter Ausdruck (gut für einfache Wertauswahl)
order_total = 45.00
shipping = 0 if order_total >= 50 else 5.99
# Version 2: if-Anweisung (ausführlicher, aber für manche klarer)
order_total = 45.00
if order_total >= 50:
shipping = 0
else:
shipping = 5.99
# Beide erzeugen dasselbe Ergebnis
print(f"Shipping: ${shipping:.2f}") # Output: Shipping: $5.99Für diesen einfachen Fall ist der bedingte Ausdruck knapper und genauso klar. Aber betrachten Sie ein komplexeres Szenario:
# Szenario: Eine Bestellung mit mehreren Schritten verarbeiten
# Version 1: if-Anweisung (passend für mehrere Aktionen)
order_total = 45.00
if order_total >= 50:
shipping = 0
discount = 0.10
message = "Free shipping applied!"
else:
shipping = 5.99
discount = 0
message = "Add $5 more for free shipping"
# Version 2: Bedingte Ausdrücke (umständlich und repetitiv)
order_total = 45.00
shipping = 0 if order_total >= 50 else 5.99
discount = 0.10 if order_total >= 50 else 0
message = "Free shipping applied!" if order_total >= 50 else "Add $5 more for free shipping"Die if-Version ist hier klarer, weil sie zusammengehörige Logik bündelt und die Bedingung nicht wiederholt.
10.7) Wann bedingte Ausdrücke die Lesbarkeit verbessern (und wann nicht)
Bedingte Ausdrücke sind ein leistungsfähiges Werkzeug, aber wie jedes Werkzeug können sie falsch eingesetzt werden. Das Ziel ist immer, Code zu schreiben, der nicht nur korrekt ist, sondern auch klar und wartbar. Lassen Sie uns Richtlinien dafür betrachten, wie Sie bedingte Ausdrücke effektiv einsetzen.
Wann bedingte Ausdrücke die Lesbarkeit verbessern
1. Einfache, klare Wahl zwischen zwei Werten
Bedingte Ausdrücke sind hervorragend, wenn die Logik unkompliziert ist:
# Hervorragende Verwendung – glasklar
discount = 0.20 if is_member else 0.10
# Hervorragende Verwendung – offensichtliche Bedeutung
status = "active" if user_logged_in else "inactive"
# Hervorragende Verwendung – einfache boolesche Auswahl
can_vote = True if age >= 18 else False
# Das könnte sogar noch einfacher sein: can_vote = age >= 182. Inline-Wertauswahl in Ausdrücken
Wenn Sie einen Wert inline benötigen und ein Auslagern umständlich wäre:
# Hervorragende Verwendung – natürliche Pluralbildung
print(f"Found {count} {'result' if count == 1 else 'results'}")
# Hervorragende Verwendung – inline Anpassung einer Berechnung
total = base_price * (0.9 if is_sale else 1.0)
# Hervorragende Verwendung – bedingte Formatierung
output = f"Status: {status.upper() if is_error else status.lower()}"3. Standardwerte setzen
Bedingte Ausdrücke eignen sich gut, um Ersatzwerte bereitzustellen:
# Hervorragende Verwendung – Standardwert-Muster
display_name = username if username else "Guest"
# Hervorragende Verwendung – Konfiguration mit Defaults
page_size = user_preference if user_preference else 25
# Hervorragende Verwendung – sichere Division
result = total / count if count > 0 else 0Wann bedingte Ausdrücke die Lesbarkeit verschlechtern
1. Verschachtelte bedingte Ausdrücke
Verschachtelung erzeugt schwer lesbaren Code:
# Schlechte Lesbarkeit – verschachtelte bedingte Ausdrücke
grade = "A" if score >= 90 else ("B" if score >= 80 else ("C" if score >= 70 else "F"))
# Viel besser – if-elif-else-Anweisung verwenden
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "F"Die if-elif-else-Version ist sofort verständlich. Der verschachtelte bedingte Ausdruck erfordert sorgfältiges Parsen, um die Logik zu verstehen.
2. Komplexe Bedingungen
Wenn die Bedingung selbst komplex ist, werden bedingte Ausdrücke schwer lesbar:
# Schlechte Lesbarkeit – komplexe Bedingung
result = "eligible" if age >= 18 and income > 30000 and credit_score > 650 and not has_bankruptcy else "not eligible"
# Besser – if-Anweisung mit klarer Struktur verwenden
if age >= 18 and income > 30000 and credit_score > 650 and not has_bankruptcy:
result = "eligible"
else:
result = "not eligible"
# Noch besser – die Bedingung aufteilen
meets_age_requirement = age >= 18
meets_income_requirement = income > 30000
meets_credit_requirement = credit_score > 650
has_clean_record = not has_bankruptcy
if meets_age_requirement and meets_income_requirement and meets_credit_requirement and has_clean_record:
result = "eligible"
else:
result = "not eligible"3. Mehrere bedingte Ausdrücke in einer Zeile
Mehrere bedingte Ausdrücke in einer einzigen Zeile zu kombinieren:
# Schlechte Lesbarkeit – zu viel in einer Zeile
price = base * (0.9 if is_member else 1.0) * (0.85 if is_sale else 1.0) + (0 if free_shipping else 5.99)
# Besser – in Schritte aufteilen
member_multiplier = 0.9 if is_member else 1.0
sale_multiplier = 0.85 if is_sale else 1.0
shipping_cost = 0 if free_shipping else 5.99
price = base * member_multiplier * sale_multiplier + shipping_cost
# Oder eine if-Anweisung verwenden, wenn die Logik komplex ist
if is_member:
price = base * 0.9
else:
price = base
if is_sale:
price = price * 0.85
if free_shipping:
shipping_cost = 0
else:
shipping_cost = 5.99
price = price + shipping_costDas Fazit
Verwenden Sie bedingte Ausdrücke, wenn sie Ihren Code klarer und knapper machen. Verwenden Sie if-Anweisungen, wenn Sie brauchen:
- Mehrere Anweisungen pro Zweig
- Mehr als zwei Zweige (
elif) - Komplexe Bedingungen oder Logik
- Seiteneffekte oder Aktionen statt Wertauswahl
Wenn Sie unsicher sind, bevorzugen Sie Klarheit gegenüber Cleverness. Code wird viel häufiger gelesen als geschrieben, also optimieren Sie für die Lesenden.
Bedingte Ausdrücke sind eine wertvolle Ergänzung Ihres Python-Werkzeugkastens. Sie erlauben es Ihnen, knappen, eleganten Code zu schreiben, wenn Sie zwischen zwei Werten wählen. Wenn Sie verstehen, wann sie die Lesbarkeit verbessern und wann nicht, können Sie fundierte Entscheidungen darüber treffen, wann Sie sie einsetzen.
Die wichtigsten Prinzipien, die Sie sich merken sollten:
- Bedingte Ausdrücke liefern Werte und können überall dort verwendet werden, wo ein Wert benötigt wird
- Die Syntax lautet
value_if_true if condition else value_if_false - Python wertet nur den relevanten Zweig aus (Kurzschlussauswertung)
- Sie sind ideal für einfache Wertauswahl in Zuweisungen und Ausdrücken
- Verwenden Sie
if-Anweisungen für mehrere Aktionen, komplexe Logik oder mehr als zwei Zweige - Priorisieren Sie Lesbarkeit—wenn ein bedingter Ausdruck schwer zu verstehen ist, verwenden Sie stattdessen eine
if-Anweisung
Während Sie weiter Python lernen, entwickeln Sie ein Gefühl dafür, wann bedingte Ausdrücke Ihren Code verbessern. Üben Sie zuerst ihre Verwendung in einfachen Fällen, und nach und nach werden Sie die Muster erkennen, in denen sie glänzen. Im nächsten Kapitel werden wir while-Schleifen (while loops) erkunden, die es uns erlauben, Aktionen abhängig von Bedingungen zu wiederholen—und damit auf den Entscheidungsfähigkeiten aufbauen, die wir in diesem Teil des Buches entwickelt haben.