Что такое тернарный оператор в питоне
Тернарный оператор в Python: синтаксис и примеры использования
28 февраля 2023
Оценки статьи
Еще никто не оценил статью
Тернарный оператор — это синтаксическая конструкция в языке программирования Python, которая позволяет компактно записывать условные выражения. В этой статье мы рассмотрим, как использовать тернарный оператор в Python, и приведем несколько примеров его применения.
Синтаксис тернарного оператора
Тернарный оператор в Python имеет следующий синтаксис:
значение_если_условие_верно> if условие> else значение_если_условие_ложно>
Где:
- — это значение, которое будет возвращено, если условие истинно.
- — это логическое выражение, которое определяет, истинно ли условие.
- — это значение, которое будет возвращено, если условие ложно.
Пример использования тернарного оператора
Для начала рассмотрим простой пример использования тернарного оператора в Python. Предположим, что у нас есть переменная x , которая содержит некоторое значение. Нам нужно присвоить другой переменной y значение 1 , если x больше 0 , и значение 0 в противном случае. Мы можем использовать тернарный оператор, чтобы сделать это в одну строку:
y = 1 if x > 0 else 0
Если x больше 0 , то y будет равна 1 , иначе 0 .
Другой пример использования тернарного оператора — это проверка, является ли число четным или нечетным.
Мы можем написать следующий код:
x = 5 result = "четное" if x % 2 == 0 else "нечетное" print(result)
Результат:
>>> нечетное
В этом примере мы используем тернарный оператор, чтобы проверить, делится ли число x на 2 без остатка. Если это так, то число x четное, и в переменную result записывается строка «четное«. Если x не делится на 2 без остатка, то число x нечетное, и в переменную result записывается строка «нечетное».
Python: Тернарный оператор
Посмотрите на определение функции, которая возвращает модуль переданного числа:
def abs(number): if number >= 0: return number return -number
Но можно записать более лаконично. Для этого справа от return должно быть выражение, но if — это инструкция, а не выражение. В Python есть конструкция, которая работает как if-else , но считается выражением. Она называется тернарный оператор — единственный оператор в Python, который требует три операнда:
def abs(number): return number if number >= 0 else -number
Общий паттерн выглядит так: if else .
Давайте перепишем начальный вариант get_type_of_sentence() аналогично.
def get_type_of_sentence(sentence): last_char = sentence[-1] if last_char == '?': return 'question' return 'normal'
def get_type_of_sentence(sentence): last_char = sentence[-1] return 'question' if last_char == '?' else 'normal' print(get_type_of_sentence('Hodor')) # => normal print(get_type_of_sentence('Hodor?')) # => question
Тернарный оператор можно вкладывать в тернарный оператор. Но не нужно так делать, так как такой код тяжело читать и отлаживать.
Задание
Реализуйте функцию flip_flop() , которая принимает на вход строку и, если эта строка равна ‘flip’ , возвращает строку ‘flop’ . В противном случае функция должна вернуть ‘flip’ .
print(flip_flop('flip')) # => 'flop' print(flip_flop('flop')) # => 'flip'
Попробуйте написать два варианта функции: с обычным if-else, и с тернарным оператором.
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Определения
- Тернарный оператор — способ превратить простую условную инструкцию в выражение, например, number if number >= 0 else -number .
Есть ли в Python тернарный условный оператор?
Сначала вычисляется condition , затем, в соответствии с его булевым значением, вычисляется и возвращается a или b . Если condition равно True, вычисляется и возвращается a , а b игнорируется; в противном случае вычисляется и возвращается b , а a игнорируется.
Это позволяет провести так называемое сокращенное вычисление: когда условие истинно — вычисляется только a , а когда условие ложно — вычисляется только b (налицо экономия времени).
>>> 'true' if True else 'false' 'true' >>> 'true' if False else 'false' 'false'
Заметьте, что тернарный оператор — это выражение (expression), а не инструкция (statement). Это означает, что вы не можете использовать инструкции (вроде pass ) или присваивания ( x = 5 , x += 5 ) внутри условного оператора:
>>> pass if False else pass File "", line 1 pass if False else pass ^ SyntaxError: invalid syntax >>> # Python обрабатывает это как `x = (1 if False else y) = 2` >>> # Часть `(1 if False else x)` верна, но >>> # она не может быть слева от знака равенства. >>> x = 1 if False else y = 2 File "", line 1 SyntaxError: cannot assign to conditional expression >>> # То же, но со скобками. >>> (x = 1) if False else (y = 2) File "", line 1 (x = 1) if False else (y = 2) ^ SyntaxError: invalid syntax
(В версии 3.8 и выше «моржовый оператор» := позволяет одновременно вычислить выражение, присвоить результат переменной, и вернуть это значение куда угодно, в том числе и в условие тернарного оператора. Но не стоит этим увлекаться — слишком быстро станет трудно разобраться в коде.)
Кроме того, поскольку это выражение, то часть else обязательна:
# Неверный синтаксис: мы не определили, какое будет значение, если # условие окажется ложным. a if True
Однако вы можете использовать тернарный оператор для присваивания значения переменной таким образом:
x = a if True else b
Или, например, в комбинации с оператором return:
def my_max(a, b): return a if a > b else b
О тернарном выражении следует думать как о «переключении» между двумя значениями. Его следует использовать, когда перед нами выбор одного из двух значений, а дальнейшие строки программы выполнятся вне зависимости от того, будет ли условие верно. Тернарный оператор используется, когда мы хотим вычислить выражение и потом что-то с ним сделать. В остальных случаях применяйте обычный if .
Имейте в виду, что некоторые питонисты недолюбливают тернарный оператор по следующим причинам:
- Порядок аргументов отличается от аналогичного классического тернарного оператора condition ? a : b многих других языков (например, C, C++, Go, Perl, Ruby, Java, JavaScript и т. д.). Это может привести к ошибкам, если человек незнаком с «необычным» поведением Питона в отношении тернарного оператора (он может перепутать порядок аргументов).
- Некоторые находят его неуклюжим, поскольку он идет вразрез с обычным ходом мысли (сначала об условии, а потом о действиях).
- Хотя «однострочный if» может быть очень полезен и делает код более лаконичным, он сильно его усложняет.
Если вам трудно запомнить порядок аргументов, то вспомните, что если произнести выражение с тернарным оператором вслух, получится примерно то же, что оператор и обозначает. Например, x = 4 if b > 8 else 9 произносится как x будет равно 4, если b больше чем 8, в противном случае 9 .
Подробно про тернарный оператор в Python
Тернарный оператор в Python также называется условным оператором. Это потому, что он может оценивать утверждение, если условие истинно или ложно.
Что такое тернарный оператор в Python?
- Тернарный оператор был представлен в Python 2.5.
- При правильном использовании тернарный оператор может уменьшить размер кода и повысить читаемость кода.
- Для данного оператора нет специального ключевого слова, это способ написания оператора if else, который создает тернарный оператор или условное выражение.
Синтаксис
Тернарный оператор в Python написан с простым синтаксисом с использованием оператора if else.
[when_true] if [condition] else [when_false]
Пример
Используя приведенный выше синтаксис, давайте быстро создадим пример:
is_fast = True car = "Ferrari" if is_fast else "Sedan"
Ясно, что представленный пример намного удобнее для чтения, чем обычный оператор if, а именно:
if is_fast: car = "Ferrari" else: car = "Sedan"
Конечно, тернарный оператор сделал код очень маленьким.
Пример тернарного оператора с Tuple
Операция, показанная в предыдущем разделе, была простой заменой условий if else. Что ж, тернарные операторы намного мощнее этих.
Мы также можем использовать тернарный оператор с кортежем.
(when_false, when_true)[condition]
Обратите внимание, что в этом синтаксисе значение False предшествует значению True. Рассмотрим этот более сложный пример, который работает с кортежами:
is_fast = True car = ("Sedan", "Ferrari")[is_fast]
Это очень редко используемый синтаксис, поскольку он может не обеспечивать четкую читаемость, как раньше. Кроме того, важно учитывать производительность этого метода, поскольку это приведет к оценке обоих элементов кортежа. Более ранний тернарный оператор не приводил к этому отставанию. На изображении ниже показан вывод примера кода тернарного оператора.
Преимущества
Основные преимущества тернарного оператора:
- Позволяет заменять простые операторы if однострочным выражением.
- Повышает читаемость кода за счет уменьшения количества строк кода.