So verwenden Sie den ternären Python-Operator
Veröffentlicht: 2023-01-04In 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, istgame_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 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.
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)
istFalse
. -
bool(<any non-zero integer>)
gibtTrue
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?
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.
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.