Python har en skrivstil som kallas ternära operatörer (villkorliga operatörer) som kan beskriva en process som ett if-uttalande på en enda rad.
Följande förklaras här, tillsammans med exempelkod.
- Grundläggande skrivning av ternära operatörer
if ... elif ... else ...
Beskriv detta på en rad- Kombinerande lista Utförlig notation och ternära operatörer
- Kombination av anonyma funktioner (lambdauttryck) och ternära operatörer
I följande artikel finns mer information om det normala if-kommandot.
Grundläggande skrivning av ternära operatörer
I Python kan den ternära operatören skrivas på följande sätt
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Om du vill byta värden beroende på omständigheterna skriver du helt enkelt varje värde som det är.
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
Om du vill växla behandling beroende på förhållanden ska du beskriva varje uttryck.
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
Uttryck som inte returnerar något värde (uttryck som returnerar None) är också godtagbara. Beroende på villkoret utvärderas ett av uttrycken och processen utförs.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Det motsvarar följande kod som är skriven med en normal if-angivelse.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
Flera villkorliga uttryck kan också sammanfogas med hjälp av logiska operatörer (och, eller osv.).
- RELATERAT:Pythons logiska operatörer och, eller, inte (logisk konjunktion, logisk disjunktion, negation)
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 ...Beskrivning på en rad
if ... elif ... else ...
Det finns inget särskilt sätt att skriva detta på en enda rad. Det kan dock förverkligas genom att använda en annan ternär operatör i uttrycket som utvärderas när det villkorliga uttrycket i den ternära operatören är falskt. Bild av nesting ternary operators.
Det kan dock vara bäst att inte använda det i stor utsträckning eftersom det försämrar läsbarheten.
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
Följande villkorliga uttryck kan tolkas på följande två sätt, men behandlas som det förstnämnda (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
Ett konkret exempel är följande. Det första uttrycket betraktas som om det vore det andra.
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
Kombinerande lista Utförlig notation och ternära operatörer
En användbar användning av den ternära operatorn är när du bearbetar listor i listförståelse-notationen.
Genom att kombinera den ternära operatören och listförståelsen är det möjligt att ersätta element i en lista eller utföra någon annan behandling beroende på villkoren.
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]
Mer information om listförståelse finns i följande artikel.
- RELATERAT:Hur man använder Pythons listförståelser
Kombination av anonyma funktioner (lambdauttryck) och ternära operatörer
Den ternära operatören, som kan beskrivas kortfattat även i en anonym funktion (lambdauttryck), är användbar.
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
Observera att även om det inte är relaterat till den ternära operatören, tilldelar ovanstående exempel ett namn till lambdauttrycket. Därför kan automatiska kontrollverktyg som Pythons kodningskonvention PEP8 generera en varning.
Detta beror på att PEP8 rekommenderar att man använder def när man tilldelar namn till funktioner.
Konceptet för PEP8 är följande
- Lambdauttryck används för att skicka anropsbara objekt som argument, till exempel utan att namnge dem.
- I lambdauttryck använder du def för att definiera med namn.