Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 15 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Esta guía te enseñará a utilizar el operador ternario en Python. Aprenderás la sintaxis y codificarás varios ejemplos para entender cómo funciona.

Empezaremos repasando cómo funciona la sentencia condicional if-else y luego aprenderemos a escribir una expresión equivalente utilizando el operador ternario.

A continuación, codificaremos algunos ejemplos y aprenderemos a emular el comportamiento del operador ternario de Python utilizando una tupla y un diccionario de Python. Por último, revisaremos algunos casos de uso en los que es preferible utilizar el operador ternario.

¡Comencemos!

La sentencia If-Else en Python: Una revisión

Puedes codificar iniciando un REPL de Python o en Editor de Python en línea de Geekflare.

La sintaxis genérica de la sentencia if-else en Python es la siguiente:

if condition:
    # do this
else:
    # do this

En el fragmento anterior, condition indica la condición que debe comprobarse. Si la condición se evalúa como Truese activa el bloque if. Si la condición se evalúa como Falsese ejecutan las sentencias del bloque else.

He aquí un ejemplo en el que el game_over se le asigna un valor booleano dependiendo de si el valor de energy es menor o igual que cero.

  • Si energy <= 0, game_over es True.
  • Else, game_over es Falso.

El siguiente fragmento de código muestra cómo hacerlo utilizando las sentencias 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 Verdadero.

Operador Ternario de Python: Sintaxis y Ejemplos

python-operador-ternario-1

Python tiene un operador ternario que funciona de forma muy parecida al operador operador condicional ternario en lenguajes como C y C++. La sintaxis general para utilizarlo es la siguiente:

expression1 if condition else expression2

Analicemos la sintaxis anterior:

  • condition: La condición a comprobar.
  • expression1: La expresión a evaluar si la condición es True.
  • expression2: La expresión a evaluar si la condición es False.

Ahora, identificaremos qué expression1, expression2y condition debe ser de la versión if-else del código.

ternario-op-ex1

Juntándolo todo, tenemos lo siguiente utilizando el operador ternario de Python.

game_over = True if energy <= 0 else False
print(game_over)
# True

Pongamos otro ejemplo. Supongamos que tienes una librería y ofreces a los lectores un descuento en su compra dependiendo de la frecuencia con la que hayan visitado tu tienda en el último año.

Sea numVisits denotan el número de visitas.

  • Si numVisits > 7el porcentaje de descuento, discount_perc es 20.
  • Else, discount_perc es 5.

Utilizamos el operador ternario para asignar valor a la variable discount_perc variable.

numVisits = 10

discount_perc = 20 if numVisits > 7 else 5

print(discount_perc)
# 20 (as numVisits = 10 which is > 7)

A continuación, aprenderemos a emular el operador ternario utilizando una tupla Python y un diccionario.

Emulación del operador ternario con la tupla de Python

Como todos los iterables en Python, las tuplas siguen la indexación cero. Así que si tienes dos elementos en una tupla, tuple_name[0] indica el primer elemento de la tupla y tuple_name[1] da el segundo elemento de la tupla.

Los tipos de datos básicos en Python son entero, flotante, cadena y booleano. Python admite la conversión de tipos, que permite representar un tipo de datos concreto mediante su representación equivalente en otro tipo de datos.

Inicie un REPL de Python y ejecute los siguientes ejemplos. Si intentas convertir enteros a booleanos, notarás lo siguiente:

  • bool(0) es False.
  • bool(<any non-zero integer>) devuelve True.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(10)
True

Del mismo modo, al convertir booleanos en enteros, tenemos lo siguiente:

>>> int(True)
1
>>> int(False)
0

Juntando la fundició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 el condition es False.
  • Elemento en el índice 1 de la tupla: El valor que se utilizará cuando el condition es True.

Uisando lo anterior, tenemos lo siguiente:

>>> numVisits = 10
>>> discount_perc = (5,20)[numVisits > 7]
>>> discount_perc
# 20

En este caso, la condición numVisits > 7 es True como numVisits es 10. Porque 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 configurar True y False como claves del diccionario. Y puede establecer expression1 y expression2 como los valores correspondientes a las claves True y Falserespectivamente.

some_dict = {True: expression1,
             False: expression2
            }

¿Qué debe hacer a continuación? Ahora bien, si utiliza some_dict[condition], expression1 correspondiente al True se evalúa si la tecla condition es True. Y expression2 se evalúa cuando condition es False.

Codifiquemos el discount_perc ejemplo (de nuevo) pero esta vez utilizando un diccionario Python.

>>> numVisits = 10
>>> discount_dict = {True: 20, False:5}
>>> discount_perc = discount_dict[numVisits > 7]
>>> discount_perc
# 20

Toma, numVisits = 10 que es mayor que 7. Por lo tanto, la condición numVisits > 7 es True. Así que discount_dict[numVisits > 7] se evalúa como discount_dict[True] que es el valor 20.

¿Debe utilizar siempre el operador ternario de Python?

¿Debe utilizar siempre el operador ternario de Python?

Hasta ahora, hemos aprendido a utilizar el operador ternario. Pero, ¿debemos utilizar siempre el operador ternario? Pues bien, el operador ternario puede no ser la mejor opción para todos los casos de uso. En esta sección se explica cuándo es preferible utilizar el operador ternario en lugar de las sentencias if-else. También veremos cuándo deberíamos considerar el uso de la sentencia if-else en lugar del operador ternario.

Más conciso que los bloques If-Else

Como se ha mencionado, en Python, la expresión del operador ternario es más concisa que la sentencia if-else. Por lo tanto, puedes utilizarlo para comprobar condiciones y evaluar expresiones condicionalmente sobre la marcha.

En el siguiente ejemplo, nums es una lista de 100 números enteros generados aleatoriamente. Para cada uno de los 100 números, comprobamos si es par o impar. Y esta evaluación se produce 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 se utilizan las sentencias condicionales if-else, la cláusula else es opcional. Veamos un ejemplo. En game_over se establece en True si el energy desciende a un valor inferior o igual a cero.

Sin embargo, si el energy es mayor que cero, el game_over nunca se inicializa. Por lo tanto, te encontrarás con errores si intentas acceder a la variable game_over variable.

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 solucionarlo es establecer game_over a 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 utiliza el operador ternario de Python equivalente al anterior, la cláusula else no es opcional. El operador ternario requiere que la expresión se evalúe cuando la cláusula condition es False.

game_over = True if energy <= 0 else False

Si cambia lo anterior por 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 comprobar varias condiciones, utilice las sentencias If-Else

Veamos un ejemplo: Cada pregunta de un conjunto de preguntas de entrevista de codificación tiene una puntuación de dificultad asociada. En función de esta puntuación, asignamos uno de los tres niveles de dificultad: fácil, medio o difícil, a una pregunta concreta. Supongamos lo siguiente:

PuntuaciónNivel de dificultad
Menos del 10fácil
Entre el 10 y el 20 medio
Más del 20duro

Dada la puntuación de dificultad, puede obtener su nivel de dificultad utilizando 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.

ternario-operador-ejemplo

El siguiente fragmento de código muestra una implementación equivalente utilizando sentencias 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 tenga varias condiciones, debe utilizar los bloques if-else en lugar del operador ternario. Esto garantiza que el código sea fácil de leer y comprender.

Además, cuando necesite ejecutar varias sentencias-dependiendo de si la condición es verdadera o falsa-debería considerar el uso de la sentencia if-else.

Conclusión

Aquí tienes un resumen de lo que has aprendido en este tutorial.

  • En Python, el operador ternario puede utilizarse con la siguiente sintaxis: expression1 if condition else expression2.
  • Puede emular el comportamiento del operador ternario utilizando tuplas y diccionarios de Python.
  • Aunque 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, puedes utilizar las sentencias if-else en lugar del operador ternario, especialmente cuando necesites encadenar varias condiciones.

A continuación, aprenda a consultar el tutorial sobre operadores igual y no igual en Python.

  • Bala Priya C
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba el lunes
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder