quarta-feira, 20 de março de 2013

Simulando o Operador Ternário em Python


A partir do python 2.5 esta receita está obsoleta, uma vez que o operador ternário "if" foi incluído oficialmente na linguagem. O texto aqui permance válido por ajudar a entender como a linguagem funciona

Às vezes pode ser desejável fazer testes simples, seguidos de uma atribuição. Existem várias maneiras de se fazer isso, como por exemplo:



if variavel == 5:
  valor = 1
else:
  valor = 0



Uma maneira mais curta seria:

valor = (0,1)[variavel == 5]


Como esse tipo de teste vai ser sempre false ou true (0 ou 1), valor irá assumir o valor do primeiro elemento da tupla se a condição for falsa, e o segundo valor, se a condição for verdadeira. Ou seja: o primeiro elemento dessa tupla deve ser o resultado para a condição falsa.


Em Python 2.5, foi adicionada a "conditional expression", ou "expressão condicional", que tem a mesma função. Ela deve ser usada no lugar dos outros exemplos nesta página exceto onde a compatibilidade com outras versões e já estritamente necessária.
Exemplo:

valor = 1 if variavel == 5 else 0


Truque "and or"

Outra maneira de simular um operador ternário em Python é usando and or. Vejamos como funciona o exemplo abaixo.
Uma string(ou inteiro ou lista ou tupla ou etc...) é sempre True se o valor dela for diferente de vazio. O operador and funciona da seguinte forma:
TRUE and QUALQUER_COISA, retorna QUALQUER_COISA FALSE and QUALQUER_COISA, retorna FALSE
Enquanto o operador or funciona assim:
TRUE or QUALQUER_COISA, retorna TRUE FALSE or QUALQUER_COISA, retorna QUALQUER_COISA

 valor = (variavel == 5) and 1 or 0