Python heeft een schrijfstijl die ternaire operatoren (voorwaardelijke operatoren) heet, die een proces zoals een if statement in een enkele regel kunnen beschrijven.
Het volgende wordt hier uitgelegd, samen met voorbeeldcode.
- Basis schrijven van ternaire operatoren
if ... elif ... else ...
Beschrijf dit in één regel- Combinatielijst Uitgebreide notatie en ternaire operatoren
- Combinatie van anonieme functies (lambda-expressies) en ternaire operatoren
Zie het volgende artikel voor meer informatie over de normale if verklaring.
Basis schrijven van ternaire operatoren
In Python kan de ternaire operator als volgt worden geschreven
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Als u de waarden wilt veranderen naargelang de omstandigheden, schrijft u gewoon elke waarde zoals ze is.
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
Als u de verwerking wilt omschakelen op basis van voorwaarden, beschrijf dan elke uitdrukking.
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
Expressies die geen waarde teruggeven (expressies die Geen teruggeven) zijn ook aanvaardbaar. Afhankelijk van de voorwaarde wordt een van de uitdrukkingen geëvalueerd en wordt het proces uitgevoerd.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Equivalent aan de volgende code geschreven met een normaal if statement.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
Meervoudige voorwaardelijke uitdrukkingen kunnen ook aan elkaar worden gekoppeld met behulp van logische operatoren (en, of, enz.).
- GERELATEERD:Python logische operatoren en, of, niet (logische conjunctie, logische disjunctie, negatie)
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 ...Beschrijving in één regel
if ... elif ... else ...
Er is geen speciale manier om dit op een enkele regel te schrijven. Het kan echter gerealiseerd worden door een andere ternaire operator te gebruiken in de uitdrukking die geëvalueerd wordt als de voorwaardelijke uitdrukking van de ternaire operator vals is. Afbeelding van het nesten van ternaire operatoren.
Het kan echter beter zijn het niet op grote schaal te gebruiken, omdat het de leesbaarheid vermindert.
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
De volgende voorwaardelijke uitdrukking kan op de volgende twee manieren worden geïnterpreteerd, maar wordt behandeld als de eerste (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
Een concreet voorbeeld is het volgende. De eerste uitdrukking wordt beschouwd alsof het de tweede was.
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
Combinatielijst Uitgebreide notatie en ternaire operatoren
Een nuttig gebruik van de ternaire operator is bij het verwerken van lijsten in list comprehension notatie.
Door de ternaire operator en de lijstbegripnotatie te combineren, is het mogelijk elementen van een lijst te vervangen of een andere verwerking uit te voeren, afhankelijk van de voorwaarden.
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]
Voor meer informatie over de notatie van lijstbegrip, zie het volgende artikel.
- GERELATEERD:Hoe Python lijst comprehensies te gebruiken
Combinatie van anonieme functies (lambda-expressies) en ternaire operatoren
De ternaire operator, die zelfs in een anonieme functie (lambda-expressie) beknopt kan worden beschreven, is nuttig.
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
Merk op dat, hoewel het geen verband houdt met de ternaire operator, het bovenstaande voorbeeld een naam toekent aan de lambda expressie. Daarom kunnen hulpmiddelen voor automatische controle, zoals Python's coderingsconventie PEP8, een waarschuwing genereren.
Dit komt omdat PEP8 het gebruik van def aanbeveelt bij het toekennen van namen aan functies.
Het concept van PEP8 is als volgt
- Lambda expressies worden gebruikt om bijvoorbeeld aanroepbare objecten als argumenten door te geven, zonder ze een naam te geven
- In lambda expressies, gebruik def om te definiëren met naam