python string - Poner una declaración simple if-then-else en una línea




while ejemplos (5)

Posible duplicado:
Operador Ternario Python

Me estoy metiendo en Python y me gusta mucho la tersura de la sintaxis. Sin embargo, ¿hay una forma más fácil de escribir una declaración if - then - else para que encaje en una sola línea?

Por ejemplo:

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

¿Hay una forma más sencilla 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 acerca de la sintaxis general.


Answers

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

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


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

Eso es más específicamente una expresión de operador ternaria que un 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 si

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

vs

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

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

con su código-fragmento se convertiría,

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

Versión de línea de comando

#!/bin/python3
import os
import sys
abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
filename = dname + sys.argv[1]
arr = open(filename).read().split("\n") 
print(arr)

Corre con:

python3 somefile.py input_file_name.txt




python syntax if-statement