Pregunta Poniendo una declaración simple if-then-else en una línea [duplicado]


Posible duplicado:
Python Ternary Operator 

Me estoy metiendo en Python y realmente me gusta la concisión de la sintaxis. Sin embargo, ¿hay una manera más fácil de escribir un if-then-else declaración por lo que cabe en una línea?

Por ejemplo:

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

¿Hay alguna forma más simple de escribir esto? Quiero decir, en Objective-C escribiría esto como:

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

¿Hay algo similar para Python?

Actualizar

Sé que en este caso puedo usar count == (count + 1) % N.

Estoy preguntando sobre la sintaxis general.


529
2018-05-10 12:58


origen


Respuestas:


Eso es más específicamente un operador ternario expresión que if-then, aquí está la sintaxis de python

value_when_true if condition else value_when_false

Mejor ejemplo: (Gracias Sr. Burns)

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

Ahora con asignación y contraste con sintaxis

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

vs

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

1023
2018-05-10 13:00



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

- el operador ternario. Aunque diría que su solución es más legible que esto.


104
2018-05-10 13:00



Además, puede usar la sintaxis "normal" si y combinarla en una línea con dos puntos.

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

94
2017-07-07 08:41



Sintaxis ternaria general:

value_true if <test> else value_false

Otra forma puede ser:

[value_false, value_true][<test>]

p.ej:

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

Esto evalúa ambas ramas antes de elegir una. Para evaluar solo la rama elegida:

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

p.ej.:

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

78
2018-05-10 13:22



<execute-test-successful-condition> if <test> else <execute-test-fail-condition>

con su fragmento de código se convertiría en

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

15
2018-05-10 15:23