So verwenden Sie den ternären Python-Operator

Veröffentlicht: 2023-01-04

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 Geekflare.

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

 if condition: # do this else: # do this

Im obigen Ausschnitt bezeichnet condition die zu prüfende Bedingung. Wenn die Bedingung zu True ausgewertet wird, 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 energy kleiner oder gleich Null ist oder nicht.

  • Wenn energy <= 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 energy -1, was kleiner als 0 ist. game_over ist also True.

Ternärer Python-Operator: Syntax und Beispiele

python-ternärer-operator-1

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:

  • condition : 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 sollten.

ternär-op-ex1

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.

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, bezeichnet tuple_name[0] das erste Element im Tupel und tuple_name[1] gibt das zweite Element im Tupel an.

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 False .
  • bool(<any non-zero integer>) 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 condition False ist.
  • Element bei Index 1 im Tupel: Der zu verwendende Wert, wenn die condition True 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 True , 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] verwenden, wird expression1 entsprechend dem True -Schlüssel ausgewertet, wenn die condition True ist. Und expression2 wird ausgewertet, wenn die condition False 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 True . Also discount_dict[numVisits > 7] zu discount_dict[True] ausgewertet, was dem Wert 20 entspricht.

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

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 energy auf einen Wert kleiner oder gleich Null fällt.

Wenn die energy 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 condition 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:

Punktzahl Schwierigkeitsgrad
Weniger als 10 leicht
Zwischen 10 und 20 Mittel
Größer als 20 schwer

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.

ternary-operator-example

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 Erwägung 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.