while una tiene sentencias sentencia recomendación otra numeros más grande expresión else elif ejemplos dentro cuál cuando condicional comparar python syntax

python - tiene - ¿Poniendo una declaración if-elif-else en una línea?



sentencias en python (8)

He leído los enlaces a continuación, pero no aborda mi pregunta.
¿Python tiene un operador condicional ternario? (la pregunta es sobre condensar la instrucción if-else en una línea)

¿Hay una manera más fácil de escribir una declaración if-elif-else para que encaje en una línea?
Por ejemplo,

if expression1: statement1 elif expression2: statement2 else: statement3

[ACTUALIZAR]

if i>100: x=2 elif i<100: x=1 else: x=0

Siento que si el ejemplo anterior pudiera escribirse de la siguiente manera, podría parecer más conciso.

x=2 if i>100 elif i<100 1 else 0 [WRONG]


Bueno, me encontré con problemas similares hace meses, luego un día me di cuenta de que puedes aprovechar el método get de un dict .

x = {i>100: 2, i<100: 1}.get(True, 0)

Básicamente, i>100 e i<100 no pueden ser ambos verdaderos, por lo que si alguno de ellos es True , obtienes el valor que deseas (2 o 1), si ninguno de ellos es True , obtienes 0 .



La gente ya ha mencionado expresiones ternarias. A veces, con una simple asignación condicional como ejemplo, es posible usar una expresión matemática para realizar la asignación condicional. Esto puede no hacer que su código sea muy legible, pero lo hace en una línea bastante corta. Tu ejemplo podría escribirse así:

x = 2*(i>100) | 1*(i<100)

Las comparaciones serían Verdadero o Falso, y al multiplicar con números sería 1 o 0. Se podría usar un + en lugar de un | en el medio.


No, no es posible (al menos no con declaraciones arbitrarias), ni es deseable. Ajustar todo en una línea probablemente violaría PEP-8 donde se estipula que las líneas no deben exceder los 80 caracteres de longitud.

También está en contra del Zen de Python: "La legibilidad cuenta". (Escriba import this en el indicador de Python para leer todo).

Puede usar una expresión ternaria en Python, pero solo para expresiones, no para declaraciones:

>>> a = "Hello" if foo() else "Goodbye"

Editar:

Su pregunta revisada ahora muestra que las tres declaraciones son idénticas, excepto por el valor asignado. En ese caso, un operador ternario encadenado funciona, pero todavía creo que es menos legible:

>>> i=100 >>> a = 1 if i<100 else 2 if i>100 else 0 >>> a 0 >>> i=101 >>> a = 1 if i<100 else 2 if i>100 else 0 >>> a 2 >>> i=99 >>> a = 1 if i<100 else 2 if i>100 else 0 >>> a 1


Puede usar declaraciones ternarias if anidadas.

# if-else ternary construct country_code = ''USA'' is_USA = True if country_code == ''USA'' else False print(''is_USA:'', is_USA) # if-elif-else ternary construct # Create function to avoid repeating code. def get_age_category_name(age): age_category_name = ''Young'' if age <= 40 else (''Middle Aged'' if age > 40 and age <= 65 else ''Senior'') return age_category_name print(get_age_category_name(25)) print(get_age_category_name(50)) print(get_age_category_name(75))


Si solo necesita diferentes expresiones para diferentes casos, esto puede funcionar para usted:

expr1 if condition1 else expr2 if condition2 else expr

Por ejemplo:

a = "neg" if b<0 else "pos" if b>0 else "zero"


Simplemente anide otra cláusula if en la declaración else. Pero eso no lo hace parecer más bonito.

>>> x=5 >>> x if x>0 else ("zero" if x==0 else "invalid value") 5 >>> x = 0 >>> x if x>0 else ("zero" if x==0 else "invalid value") ''zero'' >>> x = -1 >>> x if x>0 else ("zero" if x==0 else "invalid value") ''invalid value''


También depende de la naturaleza de tus expresiones. El consejo general sobre las otras respuestas de "no hacerlo" es bastante válido para declaraciones genéricas y genéricas.

Pero si todo lo que necesita es una tabla de "dispacth", como llamar a una función diferente según el valor de una opción determinada, puede poner las funciones para llamar dentro de un diccionario.

Algo como:

def save(): ... def edit(): ... options = {"save": save, "edit": edit, "remove": lambda : "Not Implemented"} option = get_input() result = options[option]()

(que en lugar de

if option=="save": save() ...

)