Skip to content

If inline — линейное условие

Линейная запись условных операторов (inline if) в Python позволяет компактно записывать условные выражения в одну строку. Это делает код более кратким, когда нужно выполнить простые операции в зависимости от условия.

Линейное условие — это способ записи if-else или if в одну строку. Оно часто используется для присваивания переменных, вызова функций или выполнения простых выражений.

Важно понимать, что линейное условие не применимо для конструкций if-elif-else.

Синтаксис:

py
<значение_если_истина> if <условие> else <значение_если_ложно>

Особенности:

  1. Простота выражения — условие должно быть коротким и легко читаемым.
  2. Ясность кода — для сложных условий лучше использовать стандартный if-else блок.
  3. Ограниченность действий — в одной строке не рекомендуется выполнять несколько сложных операций.

Полное ветвление

Преобразование полного ветвления в линейное представление возможно при следующих условиях:

  1. Условная конструкция состоит из только 4-х строк
  2. Однотипность выполняемых операций в теле условия для истинного и ложного условий.

if-else inline для функций

Линейное условие может вызывать разные функции в зависимости от истинности или ложности условия:

py
# if classic
number = 5
if number >= 0:
    print("positive")
else:
    print("negative")


# if inline
number = 5
print("positive") if number >= 0 else print("negative")

Нужно обратить внимание, что при преобразовании обычного условия в линейное изменяется только условная конструкция, остальной код не изменяется.

if-else inline для переменных

Линейное условие удобно использовать для присваивания переменных.

py
# if classic
number = 10
if number > 5:
    number = 8
else:
    number = -8
print(number)


# if inline
number = 10
number = 8 if number > 5 else -8
print(number)

Аналогично: при преобразовании обычного условия в линейное изменяется только условная конструкция, остальной код не изменяется.

Неполное ветвление

if inline для функций

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

py
# if classic
number = -5
if number >= 0:
    print("positive")
# else:
#     print(end="")


# if inline
number = -5
print("positive") if number >= 0 else print(end="")

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

Но вызов пустой функции, чаще неудачное преобразование, т.к. функция, может вносить изменения в код, поэтому следует быть внимательным.

Рассмотрим это же пример достроим конструкцию else используя pass - в переводе значения пропустить. Но pass приводит к ошибке в линейной записи, поэтому команду заменяют на None - которая буквально переводиться как ничего и в результате код ничего не делает.

python
# if classic
number = -5
if number >= 0:
    print("positive")
# else:
#     pass


# if inline
number = -5
# print("positive") if number >= 0 else pass  # error
print("positive") if number >= 0 else None

Стоит быть внимательным при использовании линейных уловий.

if inline для переменных

Линейное ветвление также можно использовать для изменения переменной только при истинности условия. Для преобразования неполного ветвления, так же лучше дополнить до полного ветвления. Рассмотрим типовые ошибки которые можно встретить:

py
# if classic
number = -10
if number > 5:
    number = 8
# else:
#     pass
print(number)


# if inline
number = -10
number = 8 if number > 5 else None
print(number)

Классическое условие будет работать верно, но преобразованное в линейное оно содержит ошибку. Чтобы ошибку видеть достаточно изменить значение переменной так, чтобы сработало условие else. Тогда в результате ответ будет None.

Правильное решение звучит так: "Ели переменная больше 5 то она равна 8 иначе она остается неизменной", в коде получится следующее:

py
# if classic
number = -10
if number > 5:
    number = 8
# else:
#     number = number
print(number)


# if inline
number = -10
number = 8 if number > 5 else number
print(number)

В этом коде принты будут выводить правильные значения для обоих решений.

if с сокращёнными операторами (+=, -=, *=)

Линейное условие можно использовать с сокращенными операторами +=, -=, *= и другими для изменения значения переменной. Логика та же достаиваем до полного ветвления учитывая, что знак для в условиях True и False должен быть един

Пример:

py
# if classic
number = -9
if number < 0:
    number *= -1
# else:
#     number = number  # error
#     number *= 1
print(number)


# if inline
number = -9
# number *= -1 if number < 0 else number        # error
# number = number * -1 if number < 0 else number * number   # error
number *= -1 if number < 0 else 1
print(number)

Линейная запись условных операторов (inline if) делает код более лаконичным и удобным для простых операций. Однако важно помнить, что чрезмерное использование сложных выражений в одной строке может снизить читаемость кода. Поэтому рекомендуется использовать этот подход для коротких и простых условий.

Упражнения

  1. Проверка строки на пустоту. Получите строку text. Если строка пустая, присвойте ей значение "Empty string".
  2. Определение максимума из двух чисел. Сравните два числа a и b. Определите и присвойте переменной maximum большее из них.
  3. Преобразование строки в верхний регистр. Если длина строки text меньше 8, преобразуйте её в верхний регистр.
  4. Проверка делимости на 7. Если число n делится на 5, увеличьте его на 10. В противном случае — оставьте без изменений.
  5. Определение чётности числа. Определите, чётное ли число x. Присвойте переменной result значение "even" или "odd".
  6. Применение скидки к товару. Если стоимость товара price выше 500, примените скидку в размере 20%. В противном случае — скидка 5%.

Contacts: teffal@mail.ru