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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top