Sie können dies tun:
[condition] and [expression_1] or [expression_2];
Beispiel:
print(number%2 and "odd" or "even")
Dies würde "ungerade" ausgeben, wenn die Zahl ungerade ist, oder "gerade", wenn die Zahl gerade ist.
Das Ergebnis: Wenn die Bedingung erfüllt ist, wird exp_1 ausgeführt, andernfalls wird exp_2 ausgeführt.
Anmerkung: 0, None, False, emptylist, und emptyString wird als False ausgewertet.
Und alle Daten, die nicht 0 sind, werden als True ausgewertet.
Und so funktioniert es:
Wenn die Bedingung [condition] "True" wird, wird expression_1 ausgewertet, aber nicht expression_2.
Wenn wir etwas mit 0 (Null) "und" verbinden, wird das Ergebnis immer falsch sein. Also in der unten stehenden Aussage,
0 and exp
Der Ausdruck exp wird überhaupt nicht ausgewertet, da "und" mit 0 immer zu Null ausgewertet wird und der Ausdruck nicht ausgewertet werden muss. So arbeitet der Compiler selbst in allen Sprachen.
Unter
1 or exp
der Ausdruck exp wird überhaupt nicht ausgewertet, da "oder" mit 1 immer 1 ist. Daher wird der Ausdruck exp nicht ausgewertet, da das Ergebnis ohnehin 1 sein wird (Optimierungsmethoden des Compilers).
Aber im Falle von
True and exp1 or exp2
Der zweite Ausdruck exp2 wird nicht ausgewertet, da True and exp1
wäre True, wenn exp1 nicht false ist.
Ähnlich in
False and exp1 or exp2
Der Ausdruck exp1 wird nicht ausgewertet, da False dem Schreiben von 0 entspricht und "and" mit 0 selbst 0 wäre, aber nach exp1, da "or" verwendet wird, wird der Ausdruck exp2 nach "or" ausgewertet.
Anmerkung:- Diese Art der Verzweigung mit "oder" und "und" kann nur verwendet werden, wenn der Ausdruck_1 nicht den Wahrheitswert False (oder 0 oder None oder emptylist [ ] oder emptystring ' '.) hat, denn wenn der Ausdruck_1 False wird, dann wird der Ausdruck_2 wegen des vorhandenen "oder" zwischen exp_1 und exp_2 ausgewertet.
Falls Sie dennoch möchten, dass es für alle Fälle funktioniert, unabhängig davon, welche Wahrheitswerte exp_1 und exp_2 sind, tun Sie Folgendes:
[condition] and ([expression_1] or 1) or [expression_2];
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