Python: Operador ternário

Operador Ternário

Publicado em 2010-11-04 por Vinicius Assef

Veja o seguinte trecho de código:

if sobrenome:
    completo = nome + " " + sobrenome + "."
else:
    completo = nome + "."

Existe uma forma de encurtar isso em Python, usando uma conditional expression:

completo = nome + " " + sobrenome + "." if nome else nome + "."

Esse segundo exemplo faz exatamente a mesma coisa que o primeiro, só que com menos código.

Eu tenho o cuidado de não usar conditional expression em qualquer situação porque o código pode não ficar simples de entender.

Quando o resultado é um booleano

Python possui outros recursos que encurtam testes e que podem ser úteis. Quando esperamos um booleano como resultado, por exemplo, podemos fazer assim:

eh_menor = (idade < 18)

Esse código é equivalente a:

if idade < 18:
    eh_menor = True
else:
    eh_menor = False

Como funciona? O Python faz o teste entre parênteses, resultando em um booleano. Esse resultado é atribuído à variável eh_menor.

Poderíamos usar a mesma técnica para retornar de uma função:

def eh_menor(idade):
    return (idade < 18)

Quando queremos garantir conteúdo

Outra forma de encurtar atribuições é usando o and-or trick. Essa técnica é mais antiga e decidiram criar a conditional expression justamente porque ela é complexa de entender.

Vamos supor que você escreva uma função e queira garantir conteúdo válido nos argumentos, assim:

def soma(a, b):
    if not a:
        a = 0
    if not b:
        b = 0
    return a + b

Por que eu faria uma coisa dessa? Porque pode vir None ou False nos argumentos, por exemplo, o que tornaria a soma inválida.

Podemos encurtar esse código dessa forma:

def soma(a, b):
    a = a or 0
    b = b or 0
    return a + b

Esse último código faz o mesmo que o anterior, mas usa a prioridade de testes booleanos para ter o resultado.

Essa construção pode ficar confusa, mas é útil quando temos situações simples, como no exemplo acima.

Vamos a alguns testes para ficar mais claro:

>>> 1 and 2
2
>>> 1 or 2
1
>>> 1 or 0
1
>>> 0 or 1
1
>>> 1 or 0
1
>>> 0 and 1
0
>>> 1 and 0
0

Os exemplos são didáticos e servem para demonstrar a capacidade da linguagem Python. No entanto, lembre-se que a legibilidade do código é muito mais importante do que suas habilidades com atalhos da linguagem.

Faça o possível para seu código ficar fácil de entender.

Vinicius Assef

Eu sou apaixonado por Python e shell script.

Aprenda com seus erros e dê nome certo às coisas.

Comentários