Schreiben von if-Anweisungen in einer Zeile mit dem ternären Operator von Python (Bedingungsoperator)

Geschäft

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.

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