Python tem um estilo de escrita chamado operadores ternários (operadores condicionais) que pode descrever um processo como uma declaração de se numa única linha.
O seguinte é explicado aqui, juntamente com o código da amostra.
- Escrita básica de operadores ternários
if ... elif ... else ...
Descreva-o numa linha- Lista Combinando Notação Abrangente e Operadores Ternários
- Combinação de funções anónimas (expressões lambda) e operadores ternários
Ver o artigo seguinte para mais informações sobre o normal se declaração.
Escrita básica de operadores ternários
Em Python, o operador ternário pode ser escrito da seguinte forma
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Se quiser mudar os valores de acordo com as condições, basta escrever cada valor tal como está.
Value to return if conditional expression is true if conditional expression else Value to return if conditional expression is false
a = 1
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# odd
a = 2
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# even
Se quiser mudar o processamento de acordo com as condições, descreva cada expressão.
a = 1
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 3
a = 2
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 4
Expressões que não devolvem um valor (expressões que não devolvem nenhum) também são aceitáveis. Consoante a condição, uma das expressões é avaliada e o processo é executado.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Equivalente ao seguinte código escrito com uma declaração normal se.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
As múltiplas expressões condicionais também podem ser concatenadas utilizando operadores lógicos (e, ou, etc.).
a = -2
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# negative and even
a = -1
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# positive or odd
if ... elif ... else ...Descrição de uma linha
if ... elif ... else ...
Não há nenhuma maneira especial de escrever isto numa única linha. No entanto, pode ser realizada utilizando outro operador ternário na expressão que é avaliada quando a expressão condicional do operador ternário é falsa. Imagem dos operadores ternários de nidificação.
No entanto, pode ser melhor não o utilizar extensivamente porque reduz a legibilidade.
a = 2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# positive
a = 0
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# zero
a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative
A seguinte expressão condicional pode ser interpretada das duas formas seguintes, mas é tratada como a primeira (1).
A if condition 1 else B if condition 2 else C
1. A if condition 1 else ( B if condition 2 else C )
2. ( A if condition 1 else B ) if condition 2 else C
Um exemplo concreto é o seguinte. A primeira expressão é considerada como se fosse a segunda.
a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative
result = 'negative' if a < 0 else ('positive' if a > 0 else 'zero')
print(result)
# negative
result = ('negative' if a < 0 else 'positive') if a > 0 else 'zero'
print(result)
# zero
Lista Combinando Notação Abrangente e Operadores Ternários
Uma utilização útil do operador ternário é quando se processam listas em notação de compreensão de listas.
Ao combinar a notação de operador ternário e de compreensão de lista, é possível substituir elementos de uma lista ou realizar algum outro processamento, dependendo das condições.
l = ['even' if i % 2 == 0 else i for i in range(10)]
print(l)
# ['even', 1, 'even', 3, 'even', 5, 'even', 7, 'even', 9]
l = [i * 10 if i % 2 == 0 else i for i in range(10)]
print(l)
# [0, 1, 20, 3, 40, 5, 60, 7, 80, 9]
Para mais informações sobre a notação de compreensão da lista, ver o artigo seguinte.
- RELACIONADO:Como utilizar as compreensões da lista Python
Combinação de funções anónimas (expressões lambda) e operadores ternários
O operador ternário, que pode ser descrito de forma concisa mesmo numa função anónima (expressão lambda), é útil.
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
Note-se que, embora não relacionado com o operador ternário, o exemplo acima atribui um nome à expressão lambda. Por conseguinte, ferramentas de verificação automática como a convenção de codificação Python PEP8 podem gerar um Aviso.
Isto porque PEP8 recomenda o uso de def quando se atribuem nomes a funções.
O conceito de PEP8 é o seguinte
- As expressões Lambda são utilizadas para passar objectos chamaveis como argumentos, por exemplo, sem os nomear
- Nas expressões lambda, use def para definir pelo nome