Python té un estil d’escriptura anomenat operadors ternaris (operadors condicionals) que poden descriure un procés com una instrucció if en una sola línia.
Aquí s’explica el següent, juntament amb el codi d’exemple.
- Escriptura bàsica d’operadors ternaris
if ... elif ... else ...
Descriu-ho en una línia- Combinació d’operadors de notació integral de llista i ternaris
- Combinació de funcions anònimes (expressions lambda) i operadors ternaris
Consulteu l’article següent per obtenir més informació sobre la declaració if normal.
Escriptura bàsica d’operadors ternaris
A Python, l’operador ternari es pot escriure de la següent manera
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Si voleu canviar els valors segons les condicions, simplement escriviu cada valor tal com és.
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
Si voleu canviar el processament segons les condicions, descriu cada expressió.
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
Les expressions que no retornen cap valor (expressions que no retornen Cap) també són acceptables. En funció de la condició, s’avalua una de les expressions i s’executa el procés.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Equivalent al codi següent escrit amb una instrucció if normal.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
També es poden concatenar diverses expressions condicionals mitjançant operadors lògics (i, o, 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 ...Descripció d’una línia
if ... elif ... else ...
No hi ha cap manera especial d’escriure això en una sola línia. Tanmateix, es pot realitzar utilitzant un altre operador ternari en l’expressió que s’avalua quan l’expressió condicional de l’operador ternari és falsa. Imatge d’operadors ternaris nidificants.
No obstant això, pot ser millor no utilitzar-lo àmpliament perquè redueix la llegibilitat.
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
La següent expressió condicional es pot interpretar de les dues maneres següents, però es tracta com la primera (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 exemple concret és el següent. La primera expressió es considera com si fos la segona.
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
Combinació d’operadors de notació integral de llista i ternaris
Un ús útil de l’operador ternari és quan es processen llistes en notació de comprensió de llistes.
En combinar l’operador ternari i la notació de comprensió de la llista, és possible substituir elements d’una llista o realitzar algun altre processament en funció de les condicions.
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]
Per obtenir més informació sobre la notació de comprensió de llistes, consulteu l’article següent.
- RELACIONATS:Com utilitzar la comprensió de llistes de Python
Combinació de funcions anònimes (expressions lambda) i operadors ternaris
L’operador ternari, que es pot descriure de manera concisa fins i tot en una funció anònima (expressió lambda), és ú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
Tingueu en compte que, tot i que no està relacionat amb l’operador ternari, l’exemple anterior assigna un nom a l’expressió lambda. Per tant, les eines de verificació automàtica com la convenció de codificació PEP8 de Python poden generar un avís.
Això es deu al fet que PEP8 recomana l’ús de def quan s’assignen noms a funcions.
El concepte de PEP8 és el següent
- Les expressions lambda s’utilitzen per passar objectes invocables com a arguments, per exemple, sense anomenar-los
- A les expressions lambda, utilitzeu def per definir pel nom