python if que - ¿Python tiene un operador condicional ternario?




12 Answers

Sí, fue added en la versión 2.5.
La sintaxis es:

a if condition else b

La primera condition se evalúa, luego a o b se devuelve según el valor Boolean de condition
Si la condition evalúa como verdadera, se devuelve una a, de lo contrario se devuelve b .

Por ejemplo:

>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'

Tenga en cuenta que los condicionales son una expresión , no una declaración . Esto significa que no puede usar asignaciones, pass u otras declaraciones en un condicional:

>>> pass if False else x = 3
  File "<stdin>", line 1
    pass if False else x = 3
          ^
SyntaxError: invalid syntax

En tal caso, tiene que usar una sentencia normal if lugar de una condicional.

Tenga en cuenta que está mal visto por algunos pitonistas por varias razones:

  • El orden de los argumentos es diferente de muchos otros lenguajes (como C, Ruby, Java, etc.), lo que puede provocar errores cuando las personas que no están familiarizadas con el comportamiento "sorprendente" de Python lo usan (pueden invertir el orden).
  • Algunos lo consideran "poco manejable", ya que va en contra del flujo normal de pensamiento (pensando primero en la condición y luego en los efectos).
  • Razones estilísticas.

Si tiene problemas para recordar el pedido, recuerde que si lo lee en voz alta (casi) dice lo que quiere decir. Por ejemplo, x = 4 if b > 8 else 9 se lee en voz alta ya que x will be 4 if b is greater than 8 otherwise 9 .

Documentación oficial:

es programacion

Si Python no tiene un operador condicional ternario, ¿es posible simular uno usando otras construcciones de lenguaje?




Para versiones anteriores a 2.5, hay un truco:

[expression] and [on_true] or [on_false]

Puede dar resultados incorrectos cuando on_true tiene un valor booleano falso. 1
Aunque tiene el beneficio de evaluar expresiones de izquierda a derecha, lo que es más claro en mi opinión.

1. ¿Hay un equivalente de C "?:" Operador ternario?




De la documentación :

Las expresiones condicionales (a veces llamadas "operadores ternarios") tienen la prioridad más baja de todas las operaciones de Python.

La expresión x if C else y primero evalúa la condición, C ( no x ); si C es verdadero, se evalúa x y se devuelve su valor; de lo contrario, se evalúa y y se devuelve su valor.

Vea PEP 308 para más detalles sobre expresiones condicionales.

Nuevo desde la versión 2.5.




@arriba:

Desafortunadamente, el

(falseValue, trueValue)[test]

La solución no tiene un comportamiento de cortocircuito; por lo tanto, tanto falseValue como trueValue se evalúan independientemente de la condición. Esto podría ser subóptimo o incluso con errores (es decir, tanto trueValue como falseValue podrían ser métodos y tener efectos secundarios).

Una solución para esto sería

(lambda: falseValue, lambda: trueValue)[test]()

(la ejecución se retrasa hasta que se conoce al ganador;)), pero introduce inconsistencia entre los objetos que se pueden llamar y los que no se pueden llamar. Además, no resuelve el caso cuando se utilizan propiedades.

Y así continúa la historia: elegir entre las 3 soluciones mencionadas es un compromiso entre tener la función de cortocircuito, usar al menos Python 2.5 (IMHO ya no es un problema) y no ser propenso a "trueValue-evalates-to-false" errores




Operador Ternario en diferentes lenguajes de programación.

Aquí solo trato de mostrar alguna diferencia importante en el ternary operator entre un par de lenguajes de programación.

Operador Ternario en Javascript

var a = true ? 1 : 0;
# 1
var b = false ? 1 : 0;
# 0

Operador Ternario en Ruby

a = true ? 1 : 0
# 1
b = false ? 1 : 0
# 0

Operador ternario en Scala

val a = true ? 1 | 0
# 1
val b = false ? 1 | 0
# 0

Operador ternario en programación r

a <- if (TRUE) 1 else 0
# 1
b <- if (FALSE) 1 else 0
# 0

Operador ternario en Python

a = 1 if True else 0
# 1
b = 1 if False else 0
# 0

Ahora puedes ver la belleza del lenguaje python. Es altamente legible y mantenible.




Absolutamente, y es increíblemente fácil de entender.

general syntax : first_expression if bool_expression_is_true else second_expression

Example: x= 3 if 3 > 2 else 4 
# assigns 3 to x if the boolean expression evaluates to true or 4 if it is false



Simulando el operador ternario de pitón.

Por ejemplo

a, b, x, y = 1, 2, 'a greather than b', 'b greater than a'
result = (lambda:y, lambda:x)[a > b]()

salida:

'b greater than a'



El operador condicional ternario simplemente permite probar una condición en una sola línea, reemplazando la multilínea if-else haciendo que el código sea compacto.

Sintaxis:

[on_true] si [expresión] else [on_false]

1- Método simple para usar el operador ternario:

# Program to demonstrate conditional operator
a, b = 10, 20
# Copy value of a in min if a < b else copy b
min = a if a < b else b
print(min)  # Output: 10

2- Método directo de uso de tuplas, diccionario y lambda:

# Python program to demonstrate ternary operator
a, b = 10, 20
# Use tuple for selecting an item
print( (b, a) [a < b] )
# Use Dictionary for selecting an item
print({True: a, False: b} [a < b])
# lamda is more efficient than above two methods
# because in lambda  we are assure that
# only one expression will be evaluated unlike in
# tuple and Dictionary
print((lambda: b, lambda: a)[a < b]()) # in output you should see three 10

3- El operador ternario se puede escribir como anidado if-else:

# Python program to demonstrate nested ternary operator
a, b = 10, 20
print ("Both a and b are equal" if a == b else "a is greater than b"
        if a > b else "b is greater than a")

El enfoque anterior se puede escribir como:

# Python program to demonstrate nested ternary operator
a, b = 10, 20
if a != b:
    if a > b:
        print("a is greater than b")
    else:
        print("b is greater than a")
else:
    print("Both a and b are equal") 
# Output: b is greater than a



Más una sugerencia que una respuesta (no es necesario repetir lo obvio por centésimo tiempo), pero a veces lo uso como un atajo de oneliner en tales construcciones:

if conditionX:
    print('yes')
else:
    print('nah')

, se convierte en:

print('yes') if conditionX else print('nah')

Algunos (muchos :) pueden fruncir el entrecejo como algo antipónico (incluso, ruby-ish :), pero personalmente lo encuentro más natural, es decir, cómo lo expresaría normalmente, además de un poco más atractivo visualmente en grandes bloques de código.




Sí.

>>> b = (True if 5 > 4 else False)
>>> print b
True



Sí:

Digamos que quieres darle a la variable x algún valor si alguna bool es verdadera y lo mismo

X = 5 si algo más x = 10

X = [algún valor] si [si esto es cierto, el primer valor evalúa] de lo contrario [otro valor evalúa]




Sintaxis: El operador ternario se dará como:

[on_true] if [expression] else [on_false]

p.ej

x, y = 25, 50
big = x if x < y else y
print(big)



Related