Python ima stil pisanja koji se zove ternarni operatori (uvjetni operatori) koji mogu opisati proces poput if naredbe u jednom retku.
Ovdje je objašnjeno sljedeće, zajedno s uzorkom koda.
- Osnovno pisanje ternarnih operatora
if ... elif ... else ...
Opišite ovo u jednom retku- Kombiniranje sveobuhvatne notacije popisa i ternarnih operatora
- Kombinacija anonimnih funkcija (lambda izraza) i ternarnih operatora
Pogledajte sljedeći članak za više informacija o normalnom if naredbi.
Osnovno pisanje ternarnih operatora
U Pythonu se ternarni operator može napisati na sljedeći način
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Ako želite mijenjati vrijednosti prema uvjetima, jednostavno napišite svaku vrijednost onakvu kakva jest.
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
Ako želite promijeniti obradu prema uvjetima, opišite svaki izraz.
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
Izrazi koji ne vraćaju vrijednost (izrazi koji vraćaju None) također su prihvatljivi. Ovisno o uvjetu, jedan od izraza se evaluira i proces se izvršava.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Ekvivalentno sljedećem kodu napisanom normalnom if naredbom.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
Više uvjetnih izraza također se može povezati pomoću logičkih operatora (i, ili, itd.).
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 ...Opis u jednom retku
if ... elif ... else ...
Ne postoji poseban način da se to napiše u jednom retku. Međutim, može se realizirati korištenjem drugog ternarnog operatora u izrazu koji se evaluira kada je uvjetni izraz ternarnog operatora netočan. Slika ugniježđenih ternarnih operatora.
Međutim, možda bi bilo najbolje da ga ne koristite intenzivno jer smanjuje čitljivost.
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
Sljedeći uvjetni izraz može se tumačiti na sljedeća dva načina, ali se tretira kao prvi (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
Konkretan primjer je sljedeći. Prvi izraz se smatra kao da je drugi.
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
Kombiniranje sveobuhvatne notacije popisa i ternarnih operatora
Korisna upotreba ternarnog operatora je kada obrađujete popise u zapisu za razumijevanje popisa.
Kombiniranjem ternarnog operatora i zapisa razumijevanja popisa moguće je zamijeniti elemente popisa ili izvršiti neku drugu obradu ovisno o uvjetima.
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]
Za više informacija o zapisu za razumijevanje popisa pogledajte sljedeći članak.
Kombinacija anonimnih funkcija (lambda izraza) i ternarnih operatora
Ternarni operator, koji se može sažeto opisati čak i u anonimnoj funkciji (lambda izraz), je koristan.
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
Imajte na umu da, iako nije povezan s ternarnim operatorom, gornji primjer dodjeljuje ime lambda izrazu. Stoga alati za automatsku provjeru kao što je Pythonova konvencija o kodiranju PEP8 mogu generirati upozorenje.
To je zato što PEP8 preporučuje korištenje def pri dodjeljivanju imena funkcijama.
Koncept PEP8 je sljedeći
- Lambda izrazi se koriste za prosljeđivanje objekata koji se mogu pozivati kao argumenata, na primjer, bez imenovanja
- U lambda izrazima koristite def za definiranje imenom