Ein Operator für einen bedingten Ausdruck in Python wurde 2006 als Teil von Vorschlag für Python-Erweiterung 308 . Seine Form unterscheidet sich von der üblichen ?:
Betreiber und es ist:
<expression1> if <condition> else <expression2>
was gleichbedeutend ist mit:
if <condition>: <expression1> else: <expression2>
Hier ist ein Beispiel:
result = x if a > b else y
Eine andere Syntax, die verwendet werden kann (kompatibel mit Versionen vor 2.5):
result = (lambda:y, lambda:x)[a > b]()
wobei die Operanden träge ausgewertet .
Eine andere Möglichkeit ist die Indizierung eines Tupels (was mit dem Bedingungsoperator der meisten anderen Sprachen nicht vereinbar ist):
result = (y, x)[a > b]
oder ein explizit erstelltes Wörterbuch:
result = {True: x, False: y}[a > b]
Eine andere (weniger zuverlässige), aber einfachere Methode ist die Verwendung von and
et or
Betreiber:
result = (a > b) and x or y
Dies funktioniert jedoch nicht, wenn x
wäre False
.
Eine mögliche Abhilfemaßnahme besteht darin, die x
et y
Listen oder Tupel wie im Folgenden:
result = ((a > b) and [x] or [y])[0]
oder:
result = ((a > b) and (x,) or (y,))[0]
Wenn Sie mit Wörterbüchern arbeiten, können Sie anstelle einer ternären Bedingung die Vorteile von get(key, default)
zum Beispiel:
shell = os.environ.get('SHELL', "/bin/sh")
Quelle: ?: in Python bei Wikipedia
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