Skrivning af if-udsagn i én linje med Pythons ternære operator (betingelsesoperator)

Forretning

Python har en skrivestil kaldet ternære operatorer (betingede operatorer), som kan beskrive en proces som en if-anvisning i en enkelt linje.

Følgende forklares her sammen med en kodeeksempel.

  • Grundlæggende skrivning af ternære operatorer
  • if ... elif ... else ...Beskriv dette i én linje
  • Kombinationsliste Omfattende notation og ternære operatorer
  • Kombination af anonyme funktioner (lambda-udtryk) og ternære operatorer

Se den følgende artikel for at få flere oplysninger om den normale if-erklæring.

Grundlæggende skrivning af ternære operatorer

I Python kan den ternære operatør skrives på følgende måde

Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false

Hvis du ønsker at skifte værdier i henhold til betingelser, skal du blot skrive hver værdi som den er.

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

Hvis du ønsker at skifte behandling i henhold til betingelser, skal du beskrive hvert udtryk.

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

Udtryk, der ikke returnerer en værdi (udtryk, der returnerer None), er også acceptable. Afhængigt af betingelsen evalueres et af udtrykkene, og processen udføres.

a = 1
print('even') if a % 2 == 0 else print('odd')
# odd

Svarer til følgende kode, der er skrevet med en normal if-anvisning.

a = 1

if a % 2 == 0:
    print('even')
else:
    print('odd')
# odd

Flere betingede udtryk kan også sammenkædes ved hjælp af logiske operatorer (og, eller, osv.).

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 ...Beskrivelse på én linje

if ... elif ... else ...Der er ingen særlig måde at skrive dette på en enkelt linje på. Det kan dog realiseres ved at bruge en anden ternær operatør i udtrykket, som evalueres, når det betingede udtryk i den ternære operatør er falsk. Billede af indlejring af ternære operatorer.

Det kan dog være bedst ikke at bruge det i stor udstrækning, da det forringer læsbarheden.

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

Det følgende betingede udtryk kan fortolkes på følgende to måder, men behandles som den første (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 

Et konkret eksempel er som følger. Det første udtryk betragtes som om det var det andet.

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

Kombinationsliste Omfattende notation og ternære operatorer

En nyttig anvendelse af den ternære operator er ved behandling af lister i list comprehension notation.

Ved at kombinere den ternære operatør og list comprehension notation er det muligt at erstatte elementer i en liste eller udføre en anden behandling afhængigt af betingelserne.

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]

Du kan finde flere oplysninger om notation af listeforståelse i følgende artikel.

Kombination af anonyme funktioner (lambda-udtryk) og ternære operatorer

Den ternære operator, som kan beskrives kortfattet selv i en anonym funktion (lambdaudtryk), er nyttig.

get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'

print(get_odd_even(1))
# odd

print(get_odd_even(2))
# even

Bemærk, at ovenstående eksempel tildeler et navn til lambdaudtrykket, selv om det ikke har noget med den ternære operatør at gøre. Derfor kan automatiske kontrolværktøjer som Pythons kodningskonvention PEP8 generere en Advarsel.

Det skyldes, at PEP8 anbefaler brugen af def, når man tildeler navne til funktioner.

PEP8 er som følger

  • Lambda-udtryk bruges til at sende opkaldbare objekter som argumenter, f.eks. uden at navngive dem
  • I lambda-udtryk skal du bruge def til at definere ved navn