Питхон има стил писања који се зове тернарни оператори (условни оператори) који могу описати процес као иф наредбу у једном реду.
Овде је објашњено следеће, заједно са примером кода.
- Основно писање тернарних оператора
if ... elif ... else ...
Опишите ово у једном реду- Комбиновање свеобухватне нотације листе и тернарних оператора
- Комбинација анонимних функција (ламбда израза) и тернарних оператора
Погледајте следећи чланак за више информација о нормалној изјави иф.
Основно писање тернарних оператора
У Питхон-у, тернарни оператор се може написати на следећи начин
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Ако желите да промените вредности у складу са условима, једноставно напишите сваку вредност каква јесте.
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
Ако желите да промените обраду у складу са условима, опишите сваки израз.
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
Изрази који не враћају вредност (изрази који враћају ништа) су такође прихватљиви. У зависности од услова, један од израза се вреднује и процес се извршава.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Еквивалентно следећем коду написаном нормалном иф наредбом.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
Вишеструки условни изрази се такође могу повезати помоћу логичких оператора (и, или, итд.).
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 ...Опис у једном реду
if ... elif ... else ...
Не постоји посебан начин да се ово напише у једном реду. Међутим, може се реализовати коришћењем другог тернарног оператора у изразу који се вреднује када је условни израз тернарног оператора нетачан. Слика угнеждених тернарних оператора.
Међутим, можда би било најбоље да га не користите у великој мери јер смањује читљивост.
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
Следећи условни израз се може тумачити на следећа два начина, али се третира као први (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
Конкретан пример је следећи. Први израз се сматра као да је други.
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
Комбиновање свеобухватне нотације листе и тернарних оператора
Корисна употреба тернарног оператора је када се обрађују листе у нотацији за разумевање листе.
Комбиновањем тернарног оператора и нотације разумевања листе могуће је заменити елементе листе или извршити неку другу обраду у зависности од услова.
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]
За више информација о нотацији разумевања листе, погледајте следећи чланак.
Комбинација анонимних функција (ламбда израза) и тернарних оператора
Тернарни оператор, који се може сажето описати чак и у анонимној функцији (ламбда израз), је користан.
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
Имајте на уму да, иако није повезан са тернарним оператором, горњи пример додељује име ламбда изразу. Због тога, алати за аутоматску проверу, као што је Питхон-ова конвенција о кодирању ПЕП8, могу да генеришу упозорење.
То је зато што ПЕП8 препоручује употребу деф када додељује имена функцијама.
Концепт ПЕП8 је следећи
- Ламбда изрази се користе за прослеђивање објеката који се могу позивати као аргумената, на пример, без њиховог именовања
- У ламбда изразима користите деф да дефинишете по имену