He leído los enlaces a continuación, pero no responde a mi pregunta.
¿Python tiene un operador condicional ternario? (la pregunta es sobre la condensación de la declaración if-else en una línea)
¿Existe una forma más fácil de escribir una declaración if-elif-else para que quepa en una línea?
Por ejemplo,
if expression1:
statement1
elif expression2:
statement2
else:
statement3
O un ejemplo del mundo real:
if i > 100:
x = 2
elif i < 100:
x = 1
else:
x = 0
Solo siento que si el ejemplo anterior se pudiera escribir de la siguiente manera, podría parecer más conciso.
x=2 if i>100 elif i<100 1 else 0 [WRONG]
fuente
a = 1 if i < 100 else (2 if i > 100 else 0)
(No probado, pero creo que debería funcionar)Si solo necesita diferentes expresiones para diferentes casos, esto puede funcionar para usted:
Por ejemplo:
fuente
"pos"
no es una declaración, es una expresión.Simplemente anide otra cláusula if en la instrucción else. Pero eso no hace que se vea más bonito.
fuente
A pesar de algunas otras respuestas: SÍ, ES posible :
se traduce en la siguiente línea:
de hecho, puedes anidarlos hasta el infinito. Disfruta;)
fuente
Opcionalmente, puede usar el
get
método de adict
:No necesita el
get
método si se garantiza que una de las claves se evaluará paraTrue
:Como máximo, una de las claves idealmente debería evaluarse como
True
. Si se evalúa más de una claveTrue
, los resultados pueden parecer impredecibles.fuente
Hay una alternativa que en mi opinión es bastante ilegible, pero la compartiré de todos modos solo como curiosidad:
Más información aquí: https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not
fuente
Si desea utilizar el código mencionado anteriormente en una línea, puede utilizar lo siguiente:
Al hacerlo, a x se le asignará 2 si i> 100, 1 si i <100 y 0 si i = 100
fuente
También depende de la naturaleza de sus expresiones. El consejo general sobre las otras respuestas de "no hacerlo" es bastante válido para declaraciones genéricas y expresiones genéricas.
Pero si todo lo que necesita es una tabla de "despacho", como llamar a una función diferente dependiendo del valor de una opción dada, puede poner las funciones para llamar dentro de un diccionario.
Algo como:
En lugar de un if-else:
fuente
La gente ya ha mencionado expresiones ternarias. A veces, con una asignación condicional simple como ejemplo, es posible utilizar una expresión matemática para realizar la asignación condicional. Es posible que esto no haga que su código sea muy legible, pero lo tiene en una línea bastante corta. Su ejemplo podría escribirse así:
Las comparaciones serían Verdadero o Falso, y al multiplicar con números serían 1 o 0. Se podría usar un + en lugar de un | en el medio.
fuente
El operador ternario es la mejor manera de obtener una expresión concisa. La sintaxis es
variable = value_1 if condition else value_2
. Entonces, para su ejemplo, debe aplicar el operador ternario dos veces:fuente
Puede utilizar declaraciones if ternarias anidadas.
fuente