Putting eine einfache if-then-else-Anweisung in einer Zeile [Duplikat]
-
25-09-2019 - |
Frage
Mögliche Duplizieren:
Python Ternary Operator
Ich bin gerade erst in Python, und ich mag die Prägnanz der Syntax. Allerdings gibt es einen einfacheren Weg, um eine if
-then
-else
Aussage des Schreibens, so dass es auf einer Zeile paßt?
Zum Beispiel:
if count == N:
count = 0
else:
count = N + 1
Gibt es einen einfacheren Weg, dies zu schreiben? Ich meine, in Objective-C Ich würde schreibt dies als:
count = count == N ? 0 : count + 1;
Gibt es etwas ähnliches für Python?
Aktualisieren
Ich weiß, dass in diesem Fall ich count == (count + 1) % N
verwenden kann.
Ich bin über die allgemeine Syntax fragen.
Lösung
Das ist, genauer gesagt ein ternäre Operator Ausdruck als eine if-then, ist hier die python-Syntax
value_when_true if condition else value_when_false
Besseres Beispiel: (dank Mr. Burns )
'Yes' if fruit == 'Apple' else 'No'
Jetzt mit Zuordnung und Kontrast, wenn Syntax
fruit = 'Apple'
isApple = True if fruit == 'Apple' else False
vs
fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True
Andere Tipps
Darüber hinaus können Sie immer noch die „normale“ if
Syntax und conflate es in eine Zeile mit einem Doppelpunkt.
if i > 3: print("We are done.")
oder
field_plural = None
if field_plural is not None: print("insert into testtable(plural) '{0}'".format(field_plural))
count = 0 if count == N else N+1
- der ternäre Operator. Obwohl ich Ihre Lösung würde sagen, ist besser lesbar als diese.
Allgemein ternäre Syntax:
value_true if <test> else value_false
Eine andere Möglichkeit kann sein:
[value_false, value_true][<test>]
z:
count = [0,N+1][count==N]
Dies wertet beide Zweige vor der Wahl ein. Um nur bewertet den gewählten Zweig:
[lambda: value_false, lambda: value_true][<test>]()
z.
count = [lambda:0, lambda:N+1][count==N]()
<execute-test-successful-condition> if <test> else <execute-test-fail-condition>
mit Ihrem Code-Schnipsel es würde,
count = 0 if count == N else N + 1