Python hat eine ternäre Form für Zuweisungen; es kann jedoch auch eine kürzere Form geben, die man kennen sollte.
Es kommt sehr häufig vor, dass man einer Variablen abhängig von einer Bedingung einen bestimmten Wert zuweisen muss.
>>> li1 = None
>>> li2 = [1, 2, 3]
>>>
>>> if li1:
... a = li1
... else:
... a = li2
...
>>> a
[1, 2, 3]
^ Dies ist die Langform für die Bearbeitung solcher Aufgaben.
Im Folgenden wird die ternäre Form dargestellt. Aber das ist nicht die prägnanteste Form - siehe das letzte Beispiel.
>>> a = li1 if li1 else li2
>>>
>>> a
[1, 2, 3]
>>>
Mit Python können Sie einfach Folgendes verwenden or
für alternative Zuweisungen.
>>> a = li1 or li2
>>>
>>> a
[1, 2, 3]
>>>
Die obigen Ausführungen funktionieren, da li1
est None
und der Interpreter behandelt dies als Falsch in logischen Ausdrücken. Der Interpreter geht dann weiter und wertet den zweiten Ausdruck aus, der nicht None
und es ist keine leere Liste - also wird sie zugewiesen a .
Dies funktioniert auch mit leeren Listen. Wenn Sie zum Beispiel Folgendes zuweisen möchten a
welche Liste auch immer Elemente enthält.
>>> li1 = []
>>> li2 = [1, 2, 3]
>>>
>>> a = li1 or li2
>>>
>>> a
[1, 2, 3]
>>>
Wenn Sie das wissen, können Sie solche Aufgaben einfach erledigen, wenn sie Ihnen begegnen. Das funktioniert auch mit Strings und anderen Iterablen. Sie können zuweisen a
welche Zeichenfolge auch immer nicht leer ist.
>>> s1 = ''
>>> s2 = 'hello world'
>>>
>>> a = s1 or s2
>>>
>>> a
'hello world'
>>>
Ich mochte schon immer die ternäre Syntax von C, aber Python geht noch einen Schritt weiter!
Ich verstehe, dass einige sagen, dass dies keine gute stilistische Wahl ist, weil es sich auf Mechanismen stützt, die nicht für alle Entwickler sofort ersichtlich sind. Ich persönlich bin mit diesem Standpunkt nicht einverstanden. Python ist eine Syntax-reiche Sprache mit vielen idiomatischen Tricks, die für den Anfänger nicht sofort ersichtlich sind. Aber je mehr man lernt und die Mechanik des zugrunde liegenden Systems versteht, desto mehr weiß man es zu schätzen.
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