So verwenden Sie den ternären Python-Operator

In diesem Handbuch erfahren Sie, wie Sie den ternären Operator in Python verwenden. Sie lernen die Syntax und codieren mehrere Beispiele, um zu verstehen, wie sie funktioniert.

Wir beginnen damit, uns anzusehen, wie die bedingte if-else-Anweisung funktioniert, und lernen dann, wie man einen äquivalenten Ausdruck mit dem ternären Operator schreibt.

Als Nächstes programmieren wir einige Beispiele und lernen dann, wie man das Verhalten des ternären Operators von Python mit einem Python-Tupel und einem Wörterbuch emuliert. Abschließend sehen wir uns einige Anwendungsfälle an, in denen Sie die Verwendung des ternären Operators bevorzugen sollten.

Lass uns anfangen!

Die If-Else-Anweisung in Python: Eine Überprüfung

Sie können mitcodieren, indem Sie eine Python-REPL starten oder im Online-Python-Editor von wdzwdz.

Die generische Syntax der if-else-Anweisung in Python lautet wie folgt:

if condition:
    # do this
else:
    # do this

Im obigen Ausschnitt bezeichnet Bedingung die zu prüfende Bedingung. Wenn die Bedingung wahr ist, wird der if-Block ausgelöst. Wenn die Bedingung zu False ausgewertet wird, werden die Anweisungen innerhalb des else-Blocks ausgeführt.

Hier ist ein Beispiel, bei dem der game_over-Variable ein boolescher Wert zugewiesen wird, je nachdem, ob der Energiewert kleiner oder gleich Null ist oder nicht.

  • Wenn Energie <= 0 ist, ist game_over True.
  • Andernfalls ist game_over falsch.

Das folgende Code-Snippet zeigt, wie Sie dies mit den if-else-Bedingungsanweisungen tun:

energy = -1

if energy <= 0:
    game_over = True
else:
    game_over = False

print(game_over)
# True

In diesem Beispiel ist Energie -1, was kleiner als 0 ist. Game_over ist also True.

Ternärer Python-Operator: Syntax und Beispiele

Python hat einen ternären Operator, der ähnlich wie der ternäre Bedingungsoperator in Sprachen wie C und C++ funktioniert. Die allgemeine Syntax zur Verwendung lautet wie folgt:

expression1 if condition else expression2

Analysieren wir die obige Syntax:

  • Bedingung: Die zu prüfende Bedingung.
  • expression1: Der auszuwertende Ausdruck, wenn die Bedingung wahr ist.
  • expression2: Der auszuwertende Ausdruck, wenn die Bedingung False ist.

Jetzt identifizieren wir, was expression1, expression2 und condition aus der if-else-Version des Codes sein sollen.

Zusammenfassend haben wir Folgendes, wenn wir den ternären Operator von Python verwenden.

game_over = True if energy <= 0 else False
print(game_over)
# True

Lassen Sie uns ein weiteres Beispiel codieren. Angenommen, Sie betreiben einen Buchladen und geben den Lesern einen Rabatt auf ihren Einkauf, je nachdem, wie oft sie Ihren Laden im letzten Jahr besucht haben.

  So erstellen Sie vertikale Folien in PowerPoint

Lassen Sie numVisits die Anzahl der Besuche bezeichnen.

  • Wenn numVisits > 7 ist, beträgt der Rabattprozentsatz, discount_perc, 20.
  • Andernfalls ist discount_perc 5.

Wir verwenden den ternären Operator, um der Variablen discount_perc einen Wert zuzuweisen.

numVisits = 10

discount_perc = 20 if numVisits > 7 else 5

print(discount_perc)
# 20 (as numVisits = 10 which is > 7)

Als Nächstes lernen wir, wie man den ternären Operator mit einem Python-Tupel und einem Wörterbuch emuliert.

Emulieren des ternären Operators mit Python-Tupel

Wie alle Iterables in Python folgen Tupel der Nullindizierung. Wenn Sie also zwei Elemente in einem Tupel haben, tuple_name[0] bezeichnet das erste Element im Tupel und tuple_name[1] ergibt das zweite Element im Tupel.

Die grundlegenden Datentypen in Python sind Integer, Float, String und Boolean. Python unterstützt die Typumwandlung, mit der Sie einen bestimmten Datentyp durch seine äquivalente Darstellung in einem anderen Datentyp darstellen können.

Starten Sie eine Python REPL und führen Sie die folgenden Beispiele aus. Wenn Sie versuchen, Ganzzahlen in Boolesche Werte umzuwandeln, werden Sie Folgendes bemerken:

  • bool(0) ist falsch.
  • bool() gibt True zurück.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(10)
True

In ähnlicher Weise haben wir beim Umwandeln von Boolean in Ganzzahlen Folgendes:

>>> int(True)
1
>>> int(False)
0

Beim Zusammenstellen des Typgusses und der Indizierung können wir wie folgt vorgehen:

  • Element bei Index 0 im Tupel: Der zu verwendende Wert, wenn die Bedingung falsch ist.
  • Element bei Index 1 im Tupel: Der zu verwendende Wert, wenn die Bedingung wahr ist.

Unter Verwendung des oben Gesagten haben wir Folgendes:

>>> numVisits = 10
>>> discount_perc = (5,20)[numVisits > 7]
>>> discount_perc
# 20

Hier ist die Bedingung numVisits > 7 wahr, da numVisits 10 ist. Da int(True) 1 ist, ist der Wert von discount_perc 20, das Element bei Index 1.

Emulieren des ternären Operators mit dem Python-Wörterbuch

Sie können True und False als Schlüssel des Wörterbuchs festlegen. Und Sie können expression1 und expression2 als Werte festlegen, die den Schlüsseln True bzw. False entsprechen.

some_dict = {True: expression1,
             False: expression2
            }

Was machst du als nächstes? Wenn Sie jetzt some_dict[condition], expression1, der dem True-Schlüssel entspricht, wird ausgewertet, wenn die Bedingung True ist. Und expression2 wird ausgewertet, wenn die Bedingung falsch ist.

Lassen Sie uns (erneut) das discount_perc-Beispiel codieren, diesmal jedoch mit einem Python-Wörterbuch.

>>> numVisits = 10
>>> discount_dict = {True: 20, False:5}
>>> discount_perc = discount_dict[numVisits > 7]
>>> discount_perc
# 20

Hier ist numVisits = 10, was größer als 7 ist. Daher ist die Bedingung numVisits > 7 wahr. Also discount_dict[numVisits > 7] wertet zu discount_dict aus[True] das ist der Wert 20.

Sollten Sie immer den ternären Python-Operator verwenden?

Bisher haben wir gelernt, wie man den ternären Operator verwendet. Aber sollten wir immer den ternären Operator verwenden? Nun, der ternäre Operator ist möglicherweise nicht für alle Anwendungsfälle die beste Wahl. In diesem Abschnitt wird aufgeschlüsselt, wann Sie den ternären Operator gegenüber if-else-Anweisungen bevorzugen sollten. Wir werden auch behandeln, wann wir die if-else-Anweisung anstelle des ternären Operators verwenden sollten.

Prägnanter als If-Else-Blöcke

Wie bereits erwähnt, ist der ternäre Operatorausdruck in Python prägnanter als die if-else-Anweisung. Daher können Sie es verwenden, um nach Bedingungen zu suchen und Ausdrücke im Handumdrehen bedingt auszuwerten.

Im folgenden Beispiel ist nums eine Liste mit 100 zufällig generierten ganzen Zahlen. Bei jeder der 100 Zahlen prüfen wir, ob sie gerade oder ungerade ist. Und diese Auswertung erfolgt inline innerhalb des f-Strings.

import random

nums = [random.choice(range(100)) for i in range(10)]

for num in nums:
    print(f"{num} is {'even' if num%2==0 else 'odd'}")
# sample output

0 is even
56 is even
6 is even
53 is odd
62 is even
7 is odd
8 is even
77 is odd
41 is odd
94 is even

Der ternäre Operator erfordert die Else-Klausel

Wenn Sie die bedingten if-else-Anweisungen verwenden, ist die else-Klausel optional. Nehmen wir ein Beispiel. Die game_over-Variable wird auf True gesetzt, wenn die Energie auf einen Wert kleiner oder gleich Null fällt.

Wenn die Energie jedoch größer als Null ist, wird die game_over-Variable niemals initialisiert. Sie werden also auf Fehler stoßen, wenn Sie versuchen, auf die game_over-Variable zuzugreifen.

energy = 5
if energy <= 0:
    game_over = True

print(f"Is the game over? {game_over}")
Traceback (most recent call last):
  File "ternary_op.py", line 39, in <module>
    print(f"Is the game over? {game_over}")
NameError: name 'game_over' is not defined

Eine Möglichkeit, dies zu beheben, besteht darin, game_over zunächst auf False zu setzen und es auf True zu aktualisieren, wenn das Energieniveau kleiner oder gleich Null ist.

energy = 5
game_over = False
if energy <= 0:
    game_over1 = True

print(f"Is the game over? {game_over}")

Wenn Sie jedoch den ternären Python-Operator verwenden, der dem obigen entspricht, ist die else-Klausel nicht optional. Der ternäre Operator erfordert, dass der Ausdruck ausgewertet wird, wenn die Bedingung False ist.

game_over = True if energy <= 0 else False

Wenn Sie das obige in game_over = True if energy <= 0 ändern, indem Sie den else-Teil entfernen, werden Sie wie gezeigt auf einen Syntaxfehler stoßen:

File "ternary_op.py", line 42
    game_over = True if energy <= 0
                                  ^
SyntaxError: invalid syntax

Um nach mehreren Bedingungen zu suchen, verwenden Sie If-Else-Anweisungen

Betrachten Sie das Beispiel: Jede Frage in einem Satz von Codierungsinterviewfragen hat einen zugehörigen Schwierigkeitsgrad. Abhängig von dieser Punktzahl ordnen wir einer bestimmten Frage einen der drei Schwierigkeitsgrade zu: leicht, mittel oder schwer. Angenommen, wir haben Folgendes:

PunktzahlSchwierigkeitsgradWeniger als 10einfachZwischen 10 und 20 mittelMehr als 20schwierig

Angesichts des Schwierigkeitsgrads können Sie den Schwierigkeitsgrad mit dem ternären Python-Operator wie folgt ermitteln:

score = 12

difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium"

print(difficulty_level)
# medium

Der ternäre Operatorausdruck im obigen Codeblock hat die folgende Form:

expression1 if condition1 else expression2 if condition2 else expression3

Obwohl prägnant, ist es ein bisschen schwierig zu lesen und zu analysieren. Das folgende Bild zeigt, wie der Kontrollfluss in diesem Fall abläuft.

Das folgende Code-Snippet zeigt eine äquivalente Implementierung mit if-else-Anweisungen. Wie man sieht, ist der Kontrollfluss viel einfacher zu verstehen und der Code besser lesbar.

if score < 10:
    difficulty_level="easy"
elif score > 20:
    difficulty_level="hard"
else:
    difficulty_level="medium"

print(difficulty_level)

Wenn Sie also mehrere Bedingungen haben, sollten Sie die if-else-Blöcke anstelle des ternären Operators verwenden. Dadurch wird sichergestellt, dass der Code leicht lesbar und verständlich ist.

Auch wenn Sie mehrere Anweisungen ausführen müssen – je nachdem, ob die Bedingung wahr oder falsch ist – sollten Sie die Verwendung der if-else-Anweisung in Betracht ziehen.

Fazit

Hier ist eine Zusammenfassung dessen, was Sie in diesem Tutorial gelernt haben.

  • In Python kann der ternäre Operator mit der folgenden Syntax verwendet werden: expression1 if condition else expression2.
  • Sie können das Verhalten des ternären Operators mithilfe von Python-Tupeln und -Wörterbüchern emulieren.
  • Während der ternäre Operator eine prägnantere Alternative zu den if-else-Blöcken sein kann, sollten Sie sicherstellen, dass der Code lesbar ist. Um die Lesbarkeit des Codes zu verbessern, können Sie die if-else-Anweisungen anstelle des ternären Operators verwenden, insbesondere wenn Sie mehrere Bedingungen verketten müssen.

Lesen Sie als Nächstes das Tutorial zu Gleichheits- und Ungleichheitsoperatoren in Python.

  So verwenden Sie die Nachtsicht einer Überwachungskamera durch ein Fenster