Повторение и приёмы
Краткое повторение базы плюс полезные приёмы.
Три приёма, которые делают код короче и читаемее
1. Тернарное выражение a if cond else b
Если тебе нужно выбрать одно из двух значений по условию, не обязательно писать полноценный if/else. Можно записать в одну строку:
status = "ok" if x > 0 else "no"
Читается слева направо: «возьми "ok", если x > 0, иначе "no"». Это не оператор и не функция — это выражение, у которого есть значение, поэтому его можно присваивать переменной или подставлять куда угодно.
👍 Используй для простого выбора: "да" if ok else "нет".
👎 Не вкладывай тернарные друг в друга — становится нечитаемо. Лучше обычный if/elif/else.
2. Распаковка с * (звёздочкой)
Когда у тебя список, можно сразу разобрать его на части:
a, *rest, last = [1, 2, 3, 4, 5]
a = 1
rest = [2, 3, 4]
last = 5
*rest означает «всё остальное, что не вошло в именованные переменные». Звёздочка может стоять только у одной переменной в распаковке. Удобно когда нужны первый/последний и «всё, что между».
first, *rest = [10, 20, 30, 40] # first=10, rest=[20,30,40]
*head, last = [10, 20, 30, 40] # head=[10,20,30], last=40
3. Walrus := — присвоить-и-вернуть (Python 3.8+)
Оператор «моржа» вычисляет выражение, сохраняет его в переменную, и тут же возвращает значение, чтобы его можно было использовать дальше:
if (n := len(s)) > 10:
print(n)
Это эквивалентно двум строкам:
n = len(s)
if n > 10:
print(n)
👍 Используй когда без него пришлось бы вычислять одно и то же дважды (например, длину строки и в условии, и в ветке).
👎 Не злоупотребляй — обычный = чаще читается лучше.