Skip to content

Latest commit

 

History

History
70 lines (51 loc) · 3.13 KB

ternary_operators.md

File metadata and controls

70 lines (51 loc) · 3.13 KB

Тернарные операторы

Тернарные операторы наиболее широко известны в Python как условные выражения. Эти операторы возвращают что-то в зависимости от того, является ли условие истиной или ложью. Они стали частью языка с версии 2.4.

Ниже приведены шаблоны и примеры использования.

Шаблон:

condition_is_true if condition else condition_is_false

Пример:

is_fat = True
state = "fat" if is_fat else "not fat"

Такой подход позволяет быстро проверить условие, а не писать несколько строчек оператора if. Зачастую это очень удобно, поскольку позволяет писать более компактный код, сохраняя его читабельность.

Другим вариантом (менее очевидным и не настолько широко распространенным) является использование кортежей. Вот пример кода:

Шаблон:

(if_test_is_false, if_test_is_true)[test]

Пример:

fat = True
fitness = ("худой", "толстый")[fat]
print("Али ", fitness)
# Вывод: Али толстый

Это работает поскольку в Python True == 1 и False == 0. Помимо кортежей можно использовать списки.

Пример выше редко используется и в основном считается плохой практикой у разработчиков, поскольку не является в должной мере "питонистичным" решением. Вдобавок здесь легко ошибиться в последовательности значений в кортеже.

Другой причиной не пользоваться тернарным оператором на кортежах является обработка всего кортежа при исполнении, когда как для if-else оператора такого не происходит.

Пример:

condition = True
print(2 if condition else 1/0)
# Вывод: 2

print((1/0, 2)[condition])
# Было вызвано исключение ZeroDivisionError

Во втором примере сначала собирается кортеж, а затем находится элемент под заданным индексом. Тернарный оператор на if-else следует обычной логике условного оператора if. Таким образом, если один из случаев может вернуть ошибку или обработка обоих случаев является слишком затратной операцией, то вариант с кортежами точно не стоит использовать.