Ich habe die folgenden Links gelesen, aber meine Frage wird nicht beantwortet.
Hat Python einen ternären bedingten Operator? (Bei der Frage geht es darum, die if-else-Anweisung auf eine Zeile zu reduzieren.)
Gibt es eine einfachere Möglichkeit, eine if-elif-else-Anweisung so zu schreiben, dass sie in eine Zeile passt?
Beispielsweise,
if expression1:
statement1
elif expression2:
statement2
else:
statement3
Oder ein Beispiel aus der Praxis:
if i > 100:
x = 2
elif i < 100:
x = 1
else:
x = 0
Ich habe nur das Gefühl, wenn das obige Beispiel folgendermaßen geschrieben werden könnte, könnte es prägnanter aussehen.
x=2 if i>100 elif i<100 1 else 0 [WRONG]
quelle
a = 1 if i < 100 else (2 if i > 100 else 0)
möchten, dass es besser lesbar ist, können Sie es wie folgt umklammern : (Ungetestet, aber ich denke, es sollte funktionieren)Wenn Sie nur unterschiedliche Ausdrücke für unterschiedliche Fälle benötigen, funktioniert dies möglicherweise für Sie:
Beispielsweise:
quelle
"pos"
ist keine Aussage, es ist ein Ausdruck.Verschachteln Sie einfach eine andere if-Klausel in der else-Anweisung. Aber das macht es nicht schöner.
quelle
Trotz einiger anderer Antworten: JA, es ist möglich :
übersetzt in den folgenden einen Liner:
Tatsächlich können Sie diese bis ins Unendliche verschachteln. Genießen ;)
quelle
Optional können Sie die
get
Methode a verwendendict
:Sie benötigen die
get
Methode nicht, wenn garantiert ist, dass einer der Schlüssel Folgendes auswertetTrue
:Höchstens sollte einer der Schlüssel idealerweise auswerten
True
. Wenn mehr als ein Schlüssel ausgewertet wird,True
können die Ergebnisse unvorhersehbar erscheinen.quelle
Es gibt eine Alternative, die meiner Meinung nach ziemlich unlesbar ist, aber ich werde sie trotzdem nur aus Neugier teilen:
Weitere Infos hier: https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not
quelle
Wenn Sie den oben genannten Code in einer Zeile verwenden möchten, können Sie Folgendes verwenden:
Dabei wird x 2 zugewiesen, wenn i> 100, 1, wenn i <100 und 0, wenn i = 100
quelle
Es hängt auch von der Art Ihrer Ausdrücke ab. Der allgemeine Rat zu den anderen Antworten "Nicht tun" gilt für generische Aussagen und generische Ausdrücke.
Wenn Sie jedoch nur eine "Versand" -Tabelle benötigen, z. B. das Aufrufen einer anderen Funktion, abhängig vom Wert einer bestimmten Option, können Sie die aufzurufenden Funktionen in ein Wörterbuch einfügen.
Etwas wie:
Anstelle eines Wenn-Sonst:
quelle
Die Leute haben bereits ternäre Ausdrücke erwähnt. Manchmal ist es mit einer einfachen bedingten Zuweisung als Beispiel möglich, einen mathematischen Ausdruck zu verwenden, um die bedingte Zuweisung durchzuführen. Dies macht Ihren Code möglicherweise nicht sehr lesbar, bringt ihn jedoch in eine ziemlich kurze Zeile. Ihr Beispiel könnte folgendermaßen geschrieben werden:
Die Vergleiche wären wahr oder falsch, und wenn mit Zahlen multipliziert würde, wäre dies entweder 1 oder 0. Man könnte ein + anstelle eines | verwenden mitten drin.
quelle
Der ternäre Operator ist der beste Weg zu einem präzisen Ausdruck. Die Syntax lautet
variable = value_1 if condition else value_2
. In Ihrem Beispiel müssen Sie den ternären Operator also zweimal anwenden:quelle
Sie können verschachtelte ternäre if-Anweisungen verwenden.
quelle