Python verfügt über einen Schreibstil, der als ternäre Operatoren (bedingte Operatoren) bezeichnet wird und der einen Prozess wie eine if-Anweisung in einer einzigen Zeile beschreiben kann.
Das Folgende wird hier erklärt, zusammen mit einem Beispielcode.
- Grundlegende Schreibweise von ternären Operatoren
if ... elif ... else ...
Beschreiben Sie dies in einer Zeile- Kombinierte Liste Umfassende Notation und ternäre Operatoren
- Kombination von anonymen Funktionen (Lambda-Ausdrücke) und ternären Operatoren
Weitere Informationen über die normale if-Anweisung finden Sie im folgenden Artikel.
Grundlegende Schreibweise von ternären Operatoren
In Python kann der ternäre Operator wie folgt geschrieben werden
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Wenn Sie die Werte je nach Bedingungen wechseln wollen, schreiben Sie einfach jeden Wert so, wie er ist.
Value to return if conditional expression is true if conditional expression else Value to return if conditional expression is false
a = 1
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# odd
a = 2
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# even
Wenn Sie die Verarbeitung je nach Bedingungen umschalten wollen, beschreiben Sie jeden Ausdruck.
a = 1
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 3
a = 2
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 4
Ausdrücke, die keinen Wert zurückgeben (Ausdrücke, die None zurückgeben), sind ebenfalls zulässig. Je nach Bedingung wird einer der Ausdrücke ausgewertet und der Prozess ausgeführt.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Dies entspricht dem folgenden Code, der mit einer normalen if-Anweisung geschrieben wurde.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
Mehrere bedingte Ausdrücke können auch mit logischen Operatoren (und, oder, etc.) verknüpft werden.
- VERBUNDEN:Python logische Operatoren und, oder, nicht (logische Konjunktion, logische Disjunktion, Negation)
a = -2
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# negative and even
a = -1
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# positive or odd
if ... elif ... else ...Einzeilige Beschreibung
if ... elif ... else ...
Es gibt keine spezielle Möglichkeit, dies in einer einzigen Zeile zu schreiben. Es kann jedoch durch die Verwendung eines weiteren ternären Operators im Ausdruck realisiert werden, der ausgewertet wird, wenn der bedingte Ausdruck des ternären Operators falsch ist. Bild der Verschachtelung von ternären Operatoren.
Es ist jedoch ratsam, sie nicht zu häufig zu verwenden, da sie die Lesbarkeit beeinträchtigt.
a = 2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# positive
a = 0
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# zero
a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative
Der folgende bedingte Ausdruck kann auf die beiden folgenden Arten interpretiert werden, wird aber wie die erste behandelt (1).
A if condition 1 else B if condition 2 else C
1. A if condition 1 else ( B if condition 2 else C )
2. ( A if condition 1 else B ) if condition 2 else C
Ein konkretes Beispiel lautet wie folgt. Der erste Ausdruck wird so betrachtet, als wäre er der zweite.
a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative
result = 'negative' if a < 0 else ('positive' if a > 0 else 'zero')
print(result)
# negative
result = ('negative' if a < 0 else 'positive') if a > 0 else 'zero'
print(result)
# zero
Kombinierte Liste Umfassende Notation und ternäre Operatoren
Eine nützliche Verwendung des ternären Operators ist die Verarbeitung von Listen in der Listenauffassungsnotation.
Durch die Kombination des ternären Operators und der Notation des Listenverständnisses ist es möglich, Elemente einer Liste zu ersetzen oder eine andere Verarbeitung in Abhängigkeit von den Bedingungen durchzuführen.
l = ['even' if i % 2 == 0 else i for i in range(10)]
print(l)
# ['even', 1, 'even', 3, 'even', 5, 'even', 7, 'even', 9]
l = [i * 10 if i % 2 == 0 else i for i in range(10)]
print(l)
# [0, 1, 20, 3, 40, 5, 60, 7, 80, 9]
Weitere Informationen zur Notation des Listenverständnisses finden Sie im folgenden Artikel.
Kombination von anonymen Funktionen (Lambda-Ausdrücke) und ternären Operatoren
Nützlich ist der ternäre Operator, der auch in einer anonymen Funktion (Lambda-Ausdruck) prägnant beschrieben werden kann.
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
Beachten Sie, dass dem Lambda-Ausdruck im obigen Beispiel ein Name zugewiesen wird, obwohl er nichts mit dem ternären Operator zu tun hat. Daher können automatische Prüfwerkzeuge wie Pythons Kodierungskonvention PEP8 eine Warnung erzeugen.
Dies liegt daran, dass PEP8 die Verwendung von def bei der Zuweisung von Namen zu Funktionen empfiehlt.
Das Konzept von PEP8 sieht folgendermaßen aus
- Lambda-Ausdrücke werden verwendet, um aufrufbare Objekte als Argumente zu übergeben, z. B. ohne sie zu benennen
- In Lambda-Ausdrücken verwenden Sie def, um nach Namen zu definieren