Тернарные операции в Python Обучение

Тернарные операции в Python

Очень часто новички в Python не могут разобраться с тернарными операторами. Помимо путаницы с тем, что же называют тернарным оператором, их часто пытаются применить не к месту. Однако тернарные операции очень удобны, и откладывать их изучение — значит усложнять себе работу.

Тернарная условная операция

В программировании тернарная (от лат. ternarius — «тройной») условная операция состоит из условного выражения и двух аргументов. В зависимости, от результата вычисления условного выражения, тернарная операция вернет один из аргументов.

image

Тернарные условные операции используются в разных языках программирования. Впервые они появились в Algol-60, где имели такую форму:

if <условие> then <значение 1> else <значение 0>

В некоторых языках (в основном, испытавших влияние C) подобные операции обозначают символами ?::

<условие> ? <значение 1> : <значение 2>

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

В Python тернарные операции имеют простой и понятный синтаксис:

<Значение 1> if <условие> else <значение 0>

Это делает понимание кода интуитивным. Такие строки читаются, как предложения на английском. Например,

x = 'today' if date == today else date

можно прочитать как "Икс равно 'today' если дата сегодняшняя, а иначе — дате". Такая лаконичная запись эстетичнее, чем простые условные блоки, однако имеет свои ограничения. Например, вы не можете использовать в ней break, continue, pass и другие полезные инструкции.

Не стоит путать тенрарные операторы с однострочной записью if:

a, min = 10, 3
if a > min: print(a);  print(a - min)
# 10, 7

В этом случае, если а больше min, все действия после двоеточия будут выполнены последовательно, а иначе — просто пропущены.

Не забывайте, что операторы сравнения имеют наименьший приоритет. Изменить его можно с помощью скобок:

x = (a if a > b else b) - c

Тернарные операции могут быть вложенными.

x = (
    a if a != 0 else
    b if b != 0 else
    c if c != 0 else
    d
)

Очень часто тернарные операции используются в генераторах и списковых включениях. Это единственный способ заменить значения, не подходящие по условию.

lst = [-9, 2, 0]
g = (i if i >= 0 else 0 for i in lst)
# 0 2 0
lc = [-i if i < 0 else 0 for i in lst]
# [9, 0, 0]

Обратите внимание, что тернарные операторы используют перед for. После этой инструкции нельзя использовать else.

Пользуясь тем, что True == 1, а False == 0, в записи тернарных операций можно обойтись вообще без if и else:

('AM', 'PM')[a >= 12]

Если выражение возвращает False, из кортежа будет выбран нулевой элемент, а если True - первый.

Заключение

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

Практический Python для начинающих
Практический Python для начинающих

Станьте junior Python программистом за 7 месяцев

 7 месяцев

Возможно будет интересно

Условные конструкции и сопоставление структурных шаблонов Шпаргалки
Новичок
Условные конструкции и сопоставление структурных шаблонов

Шпаргалка по условным конструкциям и сопоставлению структурных шаблонов

2022-11-09
Операторы в Python Шпаргалки
Новичок
Операторы в Python

Шпаргалка по арифметическим и условным операторам в Python

2022-11-09
Шпаргалка по индексам и срезам Шпаргалки
Новичок
Шпаргалка по индексам и срезам

Шпаргалка по индексам и срезам в Python

2022-11-10