Ja, es war hinzugefügt. in Version 2.5. Die Syntax des Ausdrucks lautet:
a if condition else b
Erste condition
ausgewertet wird, dann wird genau eine der beiden a
ou b
wird ausgewertet und auf der Grundlage der Boolean
Wert von condition
. Wenn condition
wertet aus zu True
dann a
wird ausgewertet und zurückgegeben, aber b
ignoriert wird, oder aber wenn b
wird ausgewertet und zurückgegeben, aber a
wird ignoriert.
Dies ermöglicht einen Kurzschluss, denn wenn condition
ist nur wahr a
wird ausgewertet und b
wird überhaupt nicht ausgewertet, aber wenn condition
ist nur falsch b
ausgewertet wird, und a
wird überhaupt nicht ausgewertet.
Zum Beispiel:
>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'
Beachten Sie, dass Konditionale ein Ausdruck , nicht ein Anweisung . Das heißt, Sie können keine Zuweisungsanweisungen oder pass
oder andere Aussagen innerhalb einer bedingten Ausdruck :
>>> pass if False else x = 3
File "<stdin>", line 1
pass if False else x = 3
^
SyntaxError: invalid syntax
Sie können jedoch bedingte Ausdrücke verwenden, um eine Variable wie folgt zuzuweisen:
x = a if True else b
Stellen Sie sich den bedingten Ausdruck als Umschaltung zwischen zwei Werten vor. Er ist sehr nützlich, wenn Sie sich in einer "ein Wert oder ein anderer"-Situation befinden, aber er tut nicht viel anderes.
Wenn Sie Anweisungen verwenden müssen, müssen Sie eine normale if
Anweisung anstelle einer bedingten Ausdruck .
Beachten Sie, dass dies bei einigen Pythonisten aus verschiedenen Gründen verpönt ist:
- Die Reihenfolge der Argumente unterscheidet sich von denen der klassischen
condition ? a : b
ternären Operator aus vielen anderen Sprachen (z. B. C , C++ , Weiter , Perl , Rubinrot , Java , JavaScript usw.), was zu Fehlern führen kann, wenn Leute, die mit dem "überraschenden" Verhalten von Python nicht vertraut sind, es benutzen (sie könnten die Reihenfolge der Argumente umkehren).
- Manche finden es "sperrig", da es dem normalen Gedankengang (zuerst an die Krankheit und dann an die Auswirkungen denken) zuwiderläuft.
- Stilistische Gründe. (Obwohl die "Inline
if
' kann sein wirklich nützlich sind und Ihr Skript übersichtlicher machen, verkomplizieren sie Ihren Code wirklich)
Wenn Sie sich die Reihenfolge nicht merken können, denken Sie daran, dass Sie beim lauten Lesen (fast) sagen, was Sie meinen. Zum Beispiel, x = 4 if b > 8 else 9
wird laut vorgelesen als x will be 4 if b is greater than 8 otherwise 9
.
Offizielle Dokumentation:
4 Stimmen
Obwohl Pythons, die älter als 2.5 sind, langsam der Vergangenheit angehören, gibt es hier eine Liste alter ternärer Operator-Tricks aus der Zeit vor 2.5: "Python Idioms", Suche nach dem Text 'Conditional expression' (Bedingter Ausdruck) . Wikipedia ist auch sehr hilfreich :-)
212 Stimmen
In der offiziellen Dokumentation zu Python 3.0, auf die in einem Kommentar oben verwiesen wird, wird dies als "conditional_expressions" bezeichnet und ist sehr kryptisch definiert. Diese Dokumentation enthält nicht einmal den Begriff "ternär", so dass man nur schwerlich über Google danach suchen kann, wenn man nicht genau weiß, wonach man suchen muss. Die Version 2 Dokumentation ist etwas hilfreicher und enthält einen Link zu "PEP 308" die eine Menge interessanter historischer Zusammenhänge zu dieser Frage enthält.
48 Stimmen
"ternär" (mit drei Eingängen) ist eine Folgeeigenschaft dieser Aufteilung, keine definierende Eigenschaft des Konzepts. z.B.: SQL hat
case [...] { when ... then ...} [ else ... ] end
für eine ähnliche Wirkung, aber keineswegs ternär.20 Stimmen
Auch in ISO/IEC 9899 (dem Standard für die Programmiersprache C) heißt es in Abschnitt 6.5.15 "the condtitional operator".
18 Stimmen
Wikipedia behandelt dies ausführlich in dem Artikel " ?: ".
2 Stimmen
Es wird hier erwähnt docs.python.org/3/faq/ , aber nicht in der Python-Standardbibliothek erwähnt
20 Stimmen
In den Jahren seit Nobars Kommentar hat die Dokumentation der bedingten Ausdrücke wurde aktualisiert und lautet nun Bedingte Ausdrücke (manchmal auch "ternärer Operator" genannt)...
3 Stimmen
Ich frage mich manchmal, wie es möglich ist, dass auf eine Ja- oder Nein-Frage 26 Antworten kommen
4 Stimmen
Ab 2020 liegt die umfassende Antwort in der Ternäre Operatoren'. Dokumentation: " Ternäre Operatoren sind besser bekannt als bedingte Ausdrücke [...] Sie wurden in Version 2.4 in Python integriert. "
2 Stimmen
Es ist auch nützlich, die logische
or
Operator, wie zum Beispielx = a or b