Setzen einer einfachen if-then-Anweisung auf einer Zeile [duplizieren]

Mögliche Duplikat:
Python Ternary Operator

Ich komme gerade in Python und ich mag die Neigung der Syntax. Allerdings gibt es eine einfachere Art, eine if-then-Anweisung zu schreiben, also passt es auf eine Zeile?

Beispielsweise:

if count == N: count = 0 else: count = N + 1 

Gibt es eine einfachere Art, das zu schreiben? Ich meine, in Objective-C würde ich das als:

 count = count == N ? 0 : count + 1; 

Gibt es etwas Ähnliches für Python?

Aktualisieren

Ich weiß, dass ich in diesem Fall count == (count + 1) % N .

Ich frage nach der allgemeinen Syntax.

5 Solutions collect form web for “Setzen einer einfachen if-then-Anweisung auf einer Zeile [duplizieren]”

Das ist genauer ein ternärer Betreiber Ausdruck als ein if-dann, hier ist die Python-Syntax

 value_when_true if condition else value_when_false 

Besseres Beispiel: (Danke Mr. Burns )

'Yes' if fruit == 'Apple' else 'No'

Jetzt mit Zuordnung und Kontrast mit if Syntax

 fruit = 'Apple' isApple = True if fruit == 'Apple' else False 

Vs

 fruit = 'Apple' isApple = False if fruit == 'Apple' : isApple = True 
 count = 0 if count == N else N+1 

– der ternäre Betreiber. Obwohl ich sagen würde, dass Ihre Lösung besser lesbar ist als diese.

Darüber hinaus kannst du trotzdem die "gewöhnliche" Syntax verwenden und sie in eine Zeile mit dem Doppelpunkt verwandeln.

 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)) 

Allgemeine ternäre Syntax:

 value_true if <test> else value_false 

Ein anderer Weg kann sein:

 [value_false, value_true][<test>] 

z.B:

 count = [0,N+1][count==N] 

Dies beurteilt beide Zweige vor der Auswahl eines. Um nur den ausgewählten Zweig zu bewerten:

 [lambda: value_false, lambda: value_true][<test>]() 

z.B:

 count = [lambda:0, lambda:N+1][count==N]() 
 <execute-test-successful-condition> if <test> else <execute-test-fail-condition> 

Mit deinem Code-Snippet würde es werden,

 count = 0 if count == N else N + 1 
  • Setzen einer if-elif-else-Anweisung auf eine Zeile?
  • Breaking eine Linie von Python zu mehreren Zeilen?
  • Können Sie neue Aussagen zur Python-Syntax hinzufügen?
  • Vereinfachung des französischen POS Tag Set mit NLTK
  • Ist es möglich, ein reserviertes Wort in Python zu entkommen?
  • Hat Python ein Äquivalent zu 'switch'?
  • Python: SyntaxError: Schlüsselwort kann kein Ausdruck sein
  • Was bedeutet << in Python?
  • Wo ist mein Syntaxfehler?
  • Wann sind Klammern um ein Tupel erforderlich?
  • Str.format () hebt KeyError an
  • Python ist die beste Programmiersprache der Welt.