Appearance
If inline — линейное условие
Линейная запись условных операторов (inline if
) в Python позволяет компактно записывать условные выражения в одну строку. Это делает код более кратким, когда нужно выполнить простые операции в зависимости от условия.
Линейное условие — это способ записи if-else
или if
в одну строку. Оно часто используется для присваивания переменных, вызова функций или выполнения простых выражений.
Важно понимать, что линейное условие не применимо для конструкций if-elif-else
.
Синтаксис:
py
<значение_если_истина> if <условие> else <значение_если_ложно>
Особенности:
- Простота выражения — условие должно быть коротким и легко читаемым.
- Ясность кода — для сложных условий лучше использовать стандартный
if-else
блок. - Ограниченность действий — в одной строке не рекомендуется выполнять несколько сложных операций.
Полное ветвление
Преобразование полного ветвления в линейное представление возможно при следующих условиях:
- Условная конструкция состоит из только 4-х строк
- Однотипность выполняемых операций в теле условия для истинного и ложного условий.
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
) делает код более лаконичным и удобным для простых операций. Однако важно помнить, что чрезмерное использование сложных выражений в одной строке может снизить читаемость кода. Поэтому рекомендуется использовать этот подход для коротких и простых условий.
Упражнения
- Проверка строки на пустоту. Получите строку
text
. Если строка пустая, присвойте ей значение"Empty string"
. - Определение максимума из двух чисел. Сравните два числа
a
иb
. Определите и присвойте переменнойmaximum
большее из них. - Преобразование строки в верхний регистр. Если длина строки
text
меньше8
, преобразуйте её в верхний регистр. - Проверка делимости на 7. Если число
n
делится на5
, увеличьте его на10
. В противном случае — оставьте без изменений. - Определение чётности числа. Определите, чётное ли число
x
. Присвойте переменнойresult
значение"even"
или"odd"
. - Применение скидки к товару. Если стоимость товара
price
выше500
, примените скидку в размере20%
. В противном случае — скидка5%
.