- en
- Language: ru
- Documentation version: latest
6. Тернарные операторы¶
Тернарные операторы более известны как условные выражения в Python. Эти операторы оценивают что-то, основываясь на том, что условие истинно или нет. Они стали частью Python в версии 2.4.
Вот чертеж и пример использования этих условных выражений.
Блюпринт:
value_if_true if condition else value_if_false
Пример:
is_nice = True
state = "nice" if is_nice else "not nice"
Он позволяет быстро проверить условие вместо многострочного оператора if. Часто это может оказаться очень полезным и сделать ваш код компактным, но при этом сохраняющим работоспособность.
Другой, более непонятный и не очень распространенный пример связан с кортежами. Вот пример кода:
Блюпринт:
(if_test_is_false, if_test_is_true)[test]
Пример:
nice = True
personality = ("mean", "nice")[nice]
print("The cat is ", personality)
# Output: The cat is nice
Это работает просто потому, что True == 1 и False == 0, и поэтому может быть сделано со списками в дополнение к кортежам.
Приведенный выше пример не очень широко используется и вообще не нравится питонистам за то, что он не является питоническим. Кроме того, легко перепутать, куда поместить истинное значение, а куда - ложное в кортеже.
Еще одна причина избегать использования кортежа - это то, что в результате оцениваются оба элемента кортежа, в то время как оператор if-else не оценивает.
Пример:
condition = True
print(2 if condition else 1/0)
#Output is 2
print((1/0, 2)[condition])
#ZeroDivisionError is raised
Это происходит потому, что при использовании троичного оператора tupled сначала строится кортеж, а затем находится индекс. Что касается тернарного оператора if-else, то он следует обычному логическому дереву if-else. Таким образом, если в одном случае может возникнуть исключение на основе условия, или если любой из этих методов требует больших вычислений, лучше избегать использования кортежей.
Короткорукий тернарий.
В python также существует сокращенный тернарный тег, который является более короткой версией обычного тернарного оператора, который вы видели выше.
Синтаксис был введен в Python 2.5 и может быть использован в python 2.5 и выше.
Пример.
>>> True or "Some"
True
>>>
>>> False or "Some"
'Some'
Первое утверждение (True или «Some») вернет True, а второе утверждение (False или «Some») вернет Some.
Это полезно в тех случаях, когда вы хотите быстро проверить вывод функции и выдать полезное сообщение, если вывод пуст:
>>> output = None
>>> msg = output or "No data returned"
>>> print(msg)
No data returned
Или как простой способ определения параметров функции с динамическими значениями по умолчанию:
>>> def my_function(real_name, optional_display_name=None):
>>> optional_display_name = optional_display_name or real_name
>>> print(optional_display_name)
>>> my_function("John")
John
>>> my_function("Mike", "anonymous123")
anonymous123