Ответ
Оператор присваивания в выражении :=
(неофициально — «моржовый оператор» из-за сходства с глазами и бивнями моржа) был добавлен в Python 3.8. Он позволяет одновременно присвоить значение переменной и вернуть это значение в рамках одного выражения.
Основная цель — упростить код, избегая повторных вычислений или вызовов функций, и сделать его более лаконичным.
Классический пример: цикл while
Чтение файла по строкам до тех пор, пока не встретится пустая строка.
Без оператора :=
lines = []
line = f.readline()
while line:
lines.append(line)
line = f.readline()
С оператором :=
Код становится короче и выразительнее, так как присваивание и проверка происходят в одном месте.
lines = []
while (line := f.readline()):
lines.append(line)
Другие полезные случаи применения:
-
Условия
if
:# Вместо match = re.search(pattern, text) if match: print(match.group(0)) # Можно написать if (match := re.search(pattern, text)): print(match.group(0))
-
Генераторы списков (List Comprehensions):
# Обработать только "дорогие" товары, сохранив результат вычисления cart = [{"name": "apple", "price": 1.2}, {"name": "banana", "price": 0.5}] expensive_items = [discounted_price for item in cart if (discounted_price := item['price'] * 0.9) > 1.0] # expensive_items будет [1.08]
Важное замечание:
Следует использовать оператор :=
с осторожностью. В сложных выражениях он может ухудшить читаемость кода, что противоречит одному из главных принципов Python (The Zen of Python — "Readability counts").