1353 Stimmen

Einfügen einer einfachen if-then-else-Anweisung in eine Zeile

Ich bin gerade dabei, mich mit Python vertraut zu machen, und mir gefällt die Kürze der Syntax sehr. Gibt es jedoch eine einfachere Möglichkeit, eine if - then - else Anweisung, damit sie in eine Zeile passt?

Zum Beispiel:

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

Gibt es eine einfachere Möglichkeit, dies zu schreiben? Ich meine, in Objective-C würde ich dies schreiben als:

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

Gibt es etwas Ähnliches für Python?

Update

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

Ich frage nach der allgemeinen Syntax.

2525voto

cmsjr Punkte 52971

Genauer gesagt ist das ein ternärer Operator Ausdruck als ein Wenn-Dann-Ausdruck, 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 zur if-Syntax

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

gegen

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

297voto

Johannes Braunias Punkte 2827

Außerdem können Sie weiterhin die "normalen" if Syntax und fassen sie in einer Zeile mit Doppelpunkt zusammen.

if i > 3: print("We are done.")

o

field_plural = None
if field_plural is not None: print("insert into testtable(plural) '{0}'".format(field_plural))

170voto

Tim Pietzcker Punkte 311448
count = 0 if count == N else N+1

- den ternären Operator. Allerdings würde ich sagen, dass Ihre Lösung besser lesbar ist als diese.

147voto

mshsayem Punkte 16853

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]

Dabei werden beide Zweige ausgewertet, bevor einer ausgewählt wird. Um nur den gewählten Zweig zu bewerten:

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

z.B.:

count = [lambda:0, lambda:N+1][count==N]()

29voto

phoenix24 Punkte 2022
<execute-test-successful-condition> if <test> else <execute-test-fail-condition>

mit Ihrem Code-Schnipsel würde es werden,

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X