Одна из основных ролей логических операторов в языке Python заключается в образовании выражений, которые выполняются так же, как условная инструкция if/else
. В примере ниже записана конструкция if/else
, которая вычисляет значение rez
в зависимости от истинности неравенства a < b
:
if a < b: rez = a + b else: rez = a - b
Такие инструкции настолько просты, что кажется лишнем тратить на них четыре строки. В некоторых случаях может появиться желание вложить такую конструкцию if ... else
внутрь другой инструкции вместо того, чтобы выполнять присваивание переменной. По этим причинам и потому что в языке C имеется похожая позволяющая записать те же действия в виде единственного выражения, в языке Python была введено трехместное выражение if/else
вида
# общий вид if/else в одну строку x = a if condition else b # Выражение примера выше будет # выглядеть следующим образом rez = a + b if a < b else a - b.
Данное выражение дает тот же результат, что и инструкция в примере выше, но выглядит она проще. Как и в предыдущей инструкции,интерпретатор выполняет выражение a + b
, только если a < b
имеет истинное значение, а выражение a - b
выполняется, только если a < b
имеет ложное значение. То есть вычисления здесь также выполняются по сокращенной схеме.
Дополнительно в однострочнике if/else
можно использовать еще одно вложенное условие:
# общий вид if/else в одну строку # с дополнительным условием rez = а if condition else b if condition else c # что-бы лучше читалось, можно во # втором условии поставить скобочки rez = а if condition else (b if condition else c)
Обратите внимание, что стиль написания этого выражения чем то напоминает вложенные генераторы-списков.
Однострочник if/else
с дополнительным условием будет эквивалентен следующему коду:
if condition: rez = a elif condition: rez = b else: rez = c
if/else
в одну строку:Простое (с одним условием) if
/else
в одну строку:
>>> a = 6 >>> b = 5 >>> rez = a + b if a < b else a - b >>> rez # 1 >>> i = [] >>> rez = a + b if not i else a - b >>> rez # 11
При помощи однострочника if/else
можно вызывать связанные функции:
def add(a, b): return a + b def subtract(a, b): return a - b >>> a, b = 4, 5 >>> (subtract if a > b else add)(a, b) # 9
Пример if/else
в одну строку с дополнительным условием:
>>> i = 55 >>> rez = f'{i} < 50' if i < 50 else (f'{i} > 60' if i > 60 else f'50 > {i} < 60') >>> rez # '50 > 55 < 60' >>> i=45 >>> rez = f'{i} < 50' if i < 50 else (f'{i} > 60' if i > 60 else f'50 > {i} < 60') >>> rez # '45 < 50' >>> i=65 >>> rez = f'{i} < 50' if i < 50 else (f'{i} > 60' if i > 60 else f'50 > {i} < 60') >>> rez # '65 > 60'
Если же составляющие трехместного выражения if/else
достаточно сложны, то лучше использовать полноценную инструкцию if
.