Operador Ternário
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
ouFalse
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.
Comentários