Python ten un estilo de escritura chamado operadores ternarios (operadores condicionais) que poden describir un proceso como unha instrución if nunha soa liña.
Aquí explícase o seguinte, xunto co código de mostra.
- Redacción básica de operadores ternarios
if ... elif ... else ...
Descríbeo nunha soa liña- Combinando a notación completa de lista e os operadores ternarios
- Combinación de funcións anónimas (expresións lambda) e operadores ternarios
Consulte o seguinte artigo para obter máis información sobre a declaración if normal.
Redacción básica de operadores ternarios
En Python, o operador ternario pódese escribir do seguinte xeito
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Se queres cambiar os valores segundo as condicións, simplemente escribe cada valor tal e 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 queres cambiar o procesamento segundo as condicións, describe cada expresión.
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
As expresións que non devolven un valor (expresións que devolven Ningún) tamén son aceptables. Segundo a condición, avalíase unha das expresións e execútase o proceso.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Equivale ao seguinte código escrito cunha instrución if normal.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
Tamén se poden concatenar varias expresións condicionais mediante operadores lóxicos (e, ou, etc.).
- RELACIONADO:Operadores lóxicos de Python e, ou, non (conxunción lóxica, disxunción lóxica, negación)
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 ...Descrición dunha liña
if ... elif ... else ...
Non hai ningunha forma especial de escribir isto nunha soa liña. Non obstante, pódese realizar empregando outro operador ternario na expresión que se avalía cando a expresión condicional do operador ternario é falsa. Imaxe dos operadores ternarios aniñados.
Non obstante, pode ser mellor non usalo moito porque reduce a lexibilidade.
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 expresión condicional pódese interpretar das dúas formas seguintes, pero trátase 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
Un exemplo concreto é o seguinte. A primeira expresión considérase coma se fose 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
Combinando a notación completa de lista e os operadores ternarios
Un uso útil do operador ternario é cando se procesan listas en notación de comprensión de listas.
Ao combinar o operador ternario e a notación de comprensión da lista, é posible substituír elementos dunha lista ou realizar algún outro procesamento dependendo das condicións.
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 obter máis información sobre a notación de comprensión de listas, consulte o seguinte artigo.
- RELACIONADO:Como usar as listas de comprensión de Python
Combinación de funcións anónimas (expresións lambda) e operadores ternarios
O operador ternario, que se pode describir de forma concisa mesmo nunha función anónima (expresión 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
Teña en conta que, aínda que non está relacionado co operador ternario, o exemplo anterior asigna un nome á expresión lambda. Polo tanto, ferramentas de comprobación automática como a convención de codificación PEP8 de Python poden xerar un Aviso.
Isto é porque PEP8 recomenda o uso de def ao asignar nomes ás funcións.
O concepto de PEP8 é o seguinte
- As expresións lambda úsanse para pasar obxectos invocables como argumentos, por exemplo, sen nomealos
- Nas expresións lambda, use def para definir polo nome