2010-02-03 20 views
60

Cómo sabe si Python admite alguna palabra clave o expresión como en C++ para devolver valores basado en if estado, todo en la misma línea (El C++ if expresaron con el signo de interrogación ?)Operador condicional en Python?

// C++ 
value = (a > 10 ? b : c) 
+4

Ese operador C++ se denomina "operador condicional" o "operador ternario". –

+1

Duplicado de todos estos: http://stackoverflow.com/search?q=%5Bpython%5D+ternary. Específicamente, esto: http://stackoverflow.com/questions/135303/how-can-i-closely-achieve-from-cc-in-python –

+0

posible duplicado de [¿Python tiene un operador condicional ternario?] (Http: //stackoverflow.com/questions/394809/does-python-have-a-ternary-conditional-operator) – ks1322

Respuesta

105

Desde Python 2.5 en adelante que puede hacer:

value = b if a > 10 else c 

Anteriormente tendría que hacer algo como lo siguiente, aunque la semántica no es idéntica a la del efecto de los cortocircuitos se pierde:

value = [c, b][a > 10] 

También hay otro truco usando 'y ... o' pero es mejor no usarlo, ya que tiene un comportamiento indeseable en algunas situaciones que puede conducir a un error difícil de encontrar. Ni siquiera escribiré el truco aquí porque creo que es mejor no usarlo, pero puedes leerlo en Wikipedia si quieres.

+5

Siempre me he preguntado qué notación rechazaron como "demasiado confusa" a favor de esto. –

+0

¡Gracias por su tiempo! ¡Eso es genial! –

+2

+1, ¡Puedes usar este tipo de 'si' incluso con expresiones lambda! – Serge

-2

simple es el mejor y funciona en todas las versiones.

if a>10: 
     value="b" 
    else: 
     value="c" 
+0

Hola, gracias por tu tiempo! –