Como usar o operador ternário do Python

Publicados: 2023-01-04

Este guia ensinará como usar o operador ternário em Python. Você aprenderá a sintaxe e vários exemplos de código para entender como funciona.

Começaremos revisando como a instrução condicional if-else funciona e aprenderemos como escrever uma expressão equivalente usando o operador ternário.

A seguir, codificaremos alguns exemplos e aprenderemos como emular o comportamento do operador ternário do Python usando uma tupla e um dicionário do Python. Por fim, revisaremos alguns casos de uso em que você deve preferir usar o operador ternário.

Vamos começar!

A instrução If-Else em Python: uma revisão

Você pode codificar iniciando um Python REPL ou no editor Python online do Geekflare.

A sintaxe genérica da instrução if-else em Python é a seguinte:

 if condition: # do this else: # do this

No trecho acima, condition denota a condição a ser verificada. Se a condição for avaliada como True , o bloco if será acionado. Se a condição for avaliada como False , as instruções dentro do bloco else serão executadas.

Aqui está um exemplo em que a variável game_over recebe um valor booleano, dependendo se o valor de energy é menor ou igual a zero.

  • Se energy <= 0 , game_over é True .
  • Caso contrário, game_over é falso.

O trecho de código a seguir mostra como fazer isso usando as instruções condicionais if-else:

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

Neste exemplo, energy é -1, que é menor que 0. Portanto, game_over é verdadeiro.

Operador ternário do Python: sintaxe e exemplos

python-ternary-operator-1

Python tem um operador ternário que funciona muito como o operador condicional ternário em linguagens como C e C++. A sintaxe geral para usá-lo é a seguinte:

 expression1 if condition else expression2

Vamos analisar a sintaxe acima:

  • condition : A condição a ser verificada.
  • expression1 : A expressão para avaliar se a condição é verdadeira.
  • expression2 : A expressão para avaliar se a condição é False.

Agora, identificaremos qual expression1 , expression2 e condition devem ser da versão if-else do código.

ternário-op-ex1

Juntando tudo, temos o seguinte usando o operador ternário do Python.

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

Vamos codificar outro exemplo. Suponha que você administre uma livraria e dê aos leitores um desconto em suas compras, dependendo da frequência com que eles visitaram sua loja no último ano.

Deixe numVisits denotar o número de visitas.

  • Se numVisits > 7 , a porcentagem de desconto, discount_perc é 20.
  • Caso contrário, discount_perc é 5.

Usamos o operador ternário para atribuir valor à variável discount_perc .

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

A seguir, aprenderemos como emular o operador ternário usando uma tupla do Python e um dicionário.

Emulando o operador ternário com Python Tuple

Como todos os iteráveis ​​em Python, as tuplas seguem a indexação zero. Portanto, se você tiver dois elementos em uma tupla, tuple_name[0] denota o primeiro elemento na tupla e tuple_name[1] fornece o segundo elemento na tupla.

Os tipos básicos de dados em Python são integer, float, string e boolean. O Python oferece suporte à conversão de tipos que permite representar um tipo de dados específico por sua representação equivalente em outro tipo de dados.

Inicie um Python REPL e execute os exemplos a seguir. Se você tentar converter números inteiros em booleanos, notará o seguinte:

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

Da mesma forma, ao converter Boolean para inteiros, temos o seguinte:

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

Juntando a conversão de tipos e a indexação, podemos fazer o seguinte:

  • Elemento no índice 0 na tupla: O valor a ser usado quando a condition for False .
  • Elemento no índice 1 da tupla: O valor a ser usado quando a condition for True .

Uisng o acima, temos o seguinte:

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

Aqui, a condição numVisits > 7 é True , pois numVisits é 10. Como int(True) é 1, o valor de discount_perc é 20, o elemento no índice 1.

Emulando o operador ternário com o dicionário Python

Você pode definir True e False como as chaves do dicionário. E você pode definir expression1 e expression2 como os valores correspondentes às chaves True e False , respectivamente.

 some_dict = {True: expression1, False: expression2 }

O que você faz em seguida? Agora, se você usar some_dict[condition] , a expression1 correspondente à chave True será avaliada se a condition for True . E expression2 é avaliada quando a condition é False .

Vamos codificar o exemplo discount_perc (novamente), mas desta vez usando um dicionário Python.

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

Aqui, numVisits = 10 que é maior que 7. Portanto, a condição numVisits > 7 é True . Portanto, discount_dict[numVisits > 7] avaliado como discount_dict[True] que é o valor 20.

Você deve sempre usar o operador ternário do Python?

Você deve sempre usar o operador ternário do Python

Até agora, aprendemos como usar o operador ternário. Mas devemos sempre usar o operador ternário? Bem, o operador ternário pode não ser a melhor escolha para todos os casos de uso. Esta seção detalha quando você deve preferir usar o operador ternário em vez de instruções if-else. Também abordaremos quando devemos considerar o uso da instrução if-else em vez do operador ternário.

Blocos mais concisos do que if-else

Conforme mencionado, em Python, a expressão do operador ternário é mais concisa do que a instrução if-else. Portanto, você pode usá-lo para verificar condições e avaliar expressões condicionalmente em tempo real.

No exemplo a seguir, nums é uma lista de 100 inteiros gerados aleatoriamente. Para cada um dos 100 números, verificamos se é par ou ímpar. E essa avaliação ocorre em linha dentro da f-string.

 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

O operador ternário requer a cláusula Else

Quando você estiver usando as instruções condicionais if-else, a cláusula else é opcional. Vamos dar um exemplo. A variável game_over é definida como True se a energy cair para um valor menor ou igual a zero.

Porém, se a energy for maior que zero, a variável game_over nunca é inicializada. Portanto, você encontrará erros se tentar acessar a variável 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

Uma maneira de corrigir isso é definir game_over como False inicialmente e atualizá-lo para True se o nível de energia for menor ou igual a zero.

 energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")

No entanto, ao usar o operador ternário do Python equivalente ao acima, a cláusula else não é opcional. O operador ternário exige que a expressão seja avaliada quando a condition for False .

 game_over = True if energy <= 0 else False

Se você alterar o acima para game_over = True if energy <= 0 removendo a outra parte, você encontrará um erro de sintaxe, conforme mostrado:

 File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax

Para verificar várias condições, use instruções If-Else

Considere o exemplo: Cada pergunta em um conjunto de perguntas de entrevista de codificação tem uma pontuação de dificuldade associada. Dependendo dessa pontuação, atribuímos um dos três níveis de dificuldade: fácil, médio ou difícil a uma determinada questão. Suponha que temos o seguinte:

Pontuação Nível de dificuldade
Menos do que 10 fácil
Entre 10 e 20 médio
Maior que 20 duro

Dada a pontuação de dificuldade, você pode obter seu nível de dificuldade usando o operador ternário do Python, conforme mostrado:

 score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium

A expressão do operador ternário no bloco de código acima tem o seguinte formato:

 expression1 if condition1 else expression2 if condition2 else expression3

Embora conciso, é um pouco difícil de ler e analisar. A imagem a seguir mostra como ocorre o fluxo de controle neste caso.

exemplo de operador ternário

O trecho de código a seguir mostra uma implementação equivalente usando instruções if-else. Como visto, o fluxo de controle é muito mais fácil de entender e o código é mais legível.

 if score < 10: difficulty_level="easy" elif score > 20: difficulty_level="hard" else: difficulty_level="medium" print(difficulty_level)

Portanto, quando você tiver várias condições, deverá usar os blocos if-else em vez do operador ternário. Isso garante que o código seja fácil de ler e entender.

Além disso, quando você precisa executar várias instruções — dependendo se a condição é verdadeira ou falsa — você deve considerar o uso da instrução if-else.

Conclusão

Aqui está uma recapitulação do que você aprendeu neste tutorial.

  • Em Python, o operador ternário pode ser usado com a seguinte sintaxe: expression1 if condition else expression2 .
  • Você pode emular o comportamento do operador ternário usando tuplas e dicionários do Python.
  • Embora o operador ternário possa ser uma alternativa mais concisa aos blocos if-else, você deve garantir que o código seja legível. Para melhorar a legibilidade do código, você pode usar as instruções if-else em vez do operador ternário, especialmente quando precisar encadear várias condições.

A seguir, aprenda a conferir o tutorial sobre operadores iguais e diferentes em Python.