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

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

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

**Шаблон:**

```python
condition_if_true if condition else condition_if_false
```

**Пример:**

```python
is_nice = True
state = "nice" if is_nice else "not nice"
```

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

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

**Шаблон:**

```python
(if_test_is_false, if_test_is_true)[test]
```

**Пример:**

```python
nice = True
personality = ("вредная", "добрая")[nice]
print("Кошка ", personality)
# Вывод: Кошка добрая
```

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

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

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

**Пример:**

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

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

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

**Сокращенный тернарный оператор**

В Python также существует более краткий вариант тернарного оператора. Этот синтакис был добавлен в Python 2.5 и может быть использован в новых версиях.

**Пример:**

```python
True or "Some"
# Вывод: True

False or "Some"
# Вывод: 'Some'
```

Первое выражение (`True or "Some"`) возвращает `True` и второе - `Some`.

Это удобно, когда нужно быстро проверить вернувшееся из функции значение и показать сообщение, если значения не было (вернулся `None`):

```python
func_output = None
msg = func_output or "Не было возвращено данных"
print(msg)
# Вывод: Не было возвращено данных
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://pavel-karateev.gitbook.io/intermediate-python/sintaksis/ternary_operators.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
