Cómo usar el operador ternario de Python
Publicado: 2023-01-04Esta guía le enseñará cómo usar el operador ternario en Python. Aprenderá la sintaxis y codificará varios ejemplos para comprender cómo funciona.
Comenzaremos revisando cómo funciona la declaración condicional if-else y luego aprenderemos a escribir una expresión equivalente usando el operador ternario.
A continuación, codificaremos algunos ejemplos y luego aprenderemos cómo emular el comportamiento del operador ternario de Python usando una tupla y un diccionario de Python. Finalmente, revisaremos algunos casos de uso en los que debería preferir usar el operador ternario.
¡Vamos a empezar!
La declaración If-Else en Python: una revisión
Puede codificar iniciando un REPL de Python o en el editor de Python en línea de Geekflare.
La sintaxis genérica de la instrucción if-else en Python es la siguiente:
if condition: # do this else: # do this
En el fragmento anterior, condition
denota la condición que se va a comprobar. Si la condición se evalúa como True
, entonces se activa el bloque if. Si la condición se evalúa como False
, entonces se ejecutan las declaraciones dentro del bloque else.
Aquí hay un ejemplo donde a la variable game_over
se le asigna un valor booleano dependiendo de si el valor de energy
es menor o igual a cero.
- Si
energy <= 0
,game_over
esTrue
. - De lo contrario,
game_over
es falso.
El siguiente fragmento de código muestra cómo hacer esto usando las declaraciones condicionales if-else:
energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True
En este ejemplo, energy
es -1, que es menor que 0. Por lo tanto, game_over
es True.
Operador ternario de Python: sintaxis y ejemplos
Python tiene un operador ternario que funciona de forma muy parecida al operador condicional ternario en lenguajes como C y C++. La sintaxis general para usarlo es la siguiente:
expression1 if condition else expression2
Analicemos la sintaxis anterior:
-
condition
: La condición a verificar. -
expression1
: La expresión para evaluar si la condición es Verdadera. -
expression2
: La expresión para evaluar si la condición es Falsa.
Ahora, identificaremos qué expression1
, expression2
y condition
deben ser de la versión if-else del código.
Poniéndolo todo junto, tenemos lo siguiente usando el operador ternario de Python.
game_over = True if energy <= 0 else False print(game_over) # True
Codifiquemos otro ejemplo. Supongamos que tiene una librería y ofrece a los lectores un descuento en su compra según la frecuencia con la que hayan visitado su tienda en el último año.
Sea numVisits
el número de visitas.
- Si
numVisits > 7
, el porcentaje de descuento,discount_perc
es 20. - De lo contrario,
discount_perc
es 5.
Usamos el operador ternario para asignar valor a la variable discount_perc
.
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (as numVisits = 10 which is > 7)
A continuación, aprenderemos cómo emular el operador ternario usando una tupla de Python y un diccionario.
Emulación del operador ternario con Python Tuple
Como todos los iterables en Python, las tuplas siguen una indexación cero. Entonces, si tiene dos elementos en una tupla, tuple_name[0]
denota el primer elemento en la tupla y tuple_name[1]
da el segundo elemento en la tupla.
Los tipos de datos básicos en Python son enteros, flotantes, cadenas y booleanos. Python admite la conversión de tipos que le permite representar un tipo de datos en particular por su representación equivalente en otro tipo de datos.
Inicie un REPL de Python y ejecute los siguientes ejemplos. Si intenta convertir números enteros a valores booleanos, notará lo siguiente:
-
bool(0)
esFalse
. -
bool(<any non-zero integer>)
devuelveTrue
.
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
De manera similar, al convertir booleanos a enteros, tenemos lo siguiente:
>>> int(True) 1 >>> int(False) 0
Al juntar la conversión de tipos y la indexación, podemos hacer lo siguiente:
- Elemento en el índice 0 de la tupla: el valor que se utilizará cuando la
condition
seaFalse
. - Elemento en el índice 1 de la tupla: el valor que se utilizará cuando la
condition
seaTrue
.
Usando lo anterior, tenemos lo siguiente:
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20
Aquí, la condición numVisits > 7
es True
ya que numVisits
es 10. Dado que int(True)
es 1, el valor de discount_perc
es 20, el elemento en el índice 1.
Emulación del operador ternario con el diccionario de Python
Puede establecer True
y False
como las claves del diccionario. Y puede establecer expression1
y expression2
como los valores correspondientes a las claves True
y False
, respectivamente.
some_dict = {True: expression1, False: expression2 }
¿Qué vas a hacer después? Ahora, si usa some_dict[condition]
, se evalúa expression1
correspondiente a la clave True
si la condition
es True
. Y expression2
se evalúa cuando la condition
es False
.
Codifiquemos el ejemplo de discount_perc
(nuevamente) pero esta vez usando un diccionario de Python.
>>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20
Aquí, numVisits = 10
, que es mayor que 7. Por lo tanto, la condición numVisits > 7
es True
. Entonces discount_dict[numVisits > 7]
se evalúa como discount_dict[True]
que es el valor 20.
¿Debe usar siempre el operador ternario de Python?
Hasta ahora, hemos aprendido a usar el operador ternario. Pero, ¿debemos usar siempre el operador ternario? Bueno, el operador ternario puede no ser la mejor opción para todos los casos de uso. Esta sección desglosa cuándo debería preferir usar el operador ternario sobre las declaraciones if-else. También cubriremos cuándo deberíamos considerar usar la instrucción if-else en lugar del operador ternario.
Más conciso que los bloques If-Else
Como se mencionó, en Python, la expresión del operador ternario es más concisa que la instrucción if-else. Por lo tanto, puede usarlo para verificar condiciones y evaluar expresiones condicionalmente sobre la marcha.
En el siguiente ejemplo, nums
es una lista de 100 enteros generados aleatoriamente. Para cada uno de los 100 números, verificamos si es par o impar. Y esta evaluación ocurre en línea dentro de la cadena f.
import random nums = [random.choice(range(100)) for i in range(10)] for num in nums: print(f"{num} is {'even' if num%2==0 else 'odd'}")
# sample output 0 is even 56 is even 6 is even 53 is odd 62 is even 7 is odd 8 is even 77 is odd 41 is odd 94 is even
El operador ternario requiere la cláusula Else
Cuando usa las declaraciones condicionales if-else, la cláusula else es opcional. Tomemos un ejemplo. La variable game_over
se establece en True
si la energy
cae a un valor menor o igual a cero.
Sin embargo, si la energy
es mayor que cero, la variable game_over
nunca se inicializa. Así que te encontrarás con errores si intentas acceder a la variable game_over
.
energy = 5 if energy <= 0: game_over = True print(f"Is the game over? {game_over}")
Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"Is the game over? {game_over}") NameError: name 'game_over' is not defined
Una forma de solucionar esto es establecer game_over
en False
inicialmente y actualizarlo a True
si el nivel de energía es menor o igual a cero.
energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")
Sin embargo, cuando se usa el operador ternario de Python equivalente al anterior, la cláusula else no es opcional. El operador ternario requiere que la expresión sea evaluada cuando la condition
es False
.
game_over = True if energy <= 0 else False
Si cambia lo anterior a game_over = True if energy <= 0
eliminando la parte else, se encontrará con un error de sintaxis, como se muestra:
File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax
Para verificar múltiples condiciones, use declaraciones If-Else
Considere el ejemplo: cada pregunta en un conjunto de preguntas de entrevista de codificación tiene un puntaje de dificultad asociado. Dependiendo de este puntaje, asignamos uno de los tres niveles de dificultad: fácil, medio o difícil a una pregunta en particular. Supongamos que tenemos lo siguiente:
Puntaje | Nivel de dificultad |
Menos de 10 | fácil |
Entre 10 y 20 | medio |
Mayor que 20 | duro |
Dado el puntaje de dificultad, puede obtener su nivel de dificultad usando el operador ternario de Python como se muestra:
score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium
La expresión del operador ternario en el bloque de código anterior tiene la siguiente forma:
expression1 if condition1 else expression2 if condition2 else expression3
Aunque conciso, es un poco difícil de leer y analizar. La siguiente imagen muestra cómo se produce el flujo de control en este caso.
El siguiente fragmento de código muestra una implementación equivalente usando declaraciones if-else. Como se ve, el flujo de control es mucho más fácil de entender y el código es más legible.
if score < 10: difficulty_level="easy" elif score > 20: difficulty_level="hard" else: difficulty_level="medium" print(difficulty_level)
Por lo tanto, cuando tiene varias condiciones, debe usar los bloques if-else en lugar del operador ternario. Esto asegura que el código sea fácil de leer y comprender.
Además, cuando necesite ejecutar varias declaraciones, dependiendo de si la condición es verdadera o falsa, debería considerar usar la declaración if-else.
Conclusión
Aquí hay un resumen de lo que ha aprendido en este tutorial.
- En Python, el operador ternario se puede usar con la siguiente sintaxis:
expression1 if condition else expression2
. - Puede emular el comportamiento del operador ternario utilizando tuplas y diccionarios de Python.
- Si bien el operador ternario puede ser una alternativa más concisa a los bloques if-else, debe asegurarse de que el código sea legible. Para mejorar la legibilidad del código, puede usar las declaraciones if-else en lugar del operador ternario, especialmente cuando necesita encadenar varias condiciones.
A continuación, aprenda a consultar el tutorial sobre operadores iguales y no iguales en Python.