Писане на if оператори на един ред с тернарния оператор на Python (условен оператор)

Бизнес

В Python има стил на писане, наречен тернарни оператори (условни оператори), който може да опише процес като оператор if в един ред.

Тук е обяснено следното, както и примерен код.

  • Основно писане на тройни оператори
  • if ... elif ... else ...Опишете това с един ред
  • Комбиниране на изчерпателен списък и тернарни оператори
  • Комбинация от анонимни функции (ламбда изрази) и тернарни оператори

Вижте следната статия за повече информация относно нормалната декларация if.

Основно писане на тройни оператори

На езика Python тернарният оператор може да се запише по следния начин

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

Изрази, които не връщат стойност (изрази, които връщат None), също са приемливи. В зависимост от условието се оценява един от изразите и се изпълнява процесът.

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

Еквивалентно на следния код, написан с нормална декларация if.

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 ...Няма специален начин да се напише това на един ред. Той обаче може да се реализира чрез използване на друг тернарен оператор в израза, който се оценява, когато условният израз на тернарния оператор е false. Изображение на влагане на тернарни оператори.

Въпреки това може би е по-добре да не се използва широко, тъй като намалява четливостта.

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]

За повече информация относно нотацията за разбиране на списък вижте следната статия.

Комбинация от анонимни функции (ламбда изрази) и тернарни оператори

Полезен е тройният оператор, който може да бъде описан кратко дори в анонимна функция (lambda израз).

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

print(get_odd_even(1))
# odd

print(get_odd_even(2))
# even

Обърнете внимание, че въпреки че не е свързан с тернарния оператор, горният пример задава име на ламбда израза. Поради това инструментите за автоматична проверка, като например конвенцията за кодиране PEP8 на Python, могат да генерират Предупреждение.

Това е така, защото PEP8 препоръчва използването на def при присвояване на имена на функции.

Концепцията на PEP8 е следната

  • Ламбда изразите се използват за предаване на обекти, които могат да бъдат извикани, като аргументи, например, без да ги именувате.
  • В ламбда изрази използвайте def, за да дефинирате по име
Copied title and URL