Условие внутри выражения
Запись a if condition else b выбирает значение a при истинном condition и b иначе. В отличие от обычного блока if, результат можно сразу вернуть из функции или присвоить переменной.
Задание источника
Если аргумент равен flip, верните flop. Во всех остальных случаях верните flip. Сначала вариант с двумя блоками:
def flip_flop(value: str) -> str:
if value == "flip":
return "flop"
else:
return "flip"
Тот же договор через условное выражение:
def flip_flop(value: str) -> str:
return "flop" if value == "flip" else "flip"
Что проверять кроме двух известных состояний
Для flip результат flop, для flop — flip. Но условие говорит «в противном случае», поэтому flip_flop("other") и flip_flop("") тоже возвращают flip. Возвращать ошибку для неизвестного слова было бы другой спецификацией.
Вычисляется только выбранная часть
Условное выражение не обязано вычислять обе альтернативы. Например, 10 / divisor if divisor != 0 else None не выполняет деление при нулевом divisor. Это редакционный пример короткого выбора; он не определяет универсальную политику обработки ошибок.
Когда блок понятнее
Для одного короткого выбора условное выражение читается легко. Если в каждой ветви нужны несколько действий или выражения вложены друг в друга, обычный if может яснее показывать поток программы. Сокращение количества строк не должно скрывать смысл.
В исходном материале конструкция называется тернарным оператором; в документации Python также используется термин «условное выражение». Обе формулировки здесь относятся к одной записи с if и else.
Hexlet / Code Basics и участники · Исходный урок и решение · GNU AGPL v3. Оба варианта сохраняют правило задания.