Опубликован: 02.09.2023 143
В Python 3.8 был добавлен новый оператор присваивания под названием «оператор морж» (или walrus operator).
Такое необычное название связано с тем, как оператор выглядит ( := )
(символы, добавляющие «глаза» и «бивни», создают характерный образ моржа, лежащего на берегу моря).
Оператор ( := )
совмещает функцию присваивания значения переменной с возвратом этого значения. Присваивания с помощью моржового оператора требуется делать в круглых скобках (x := 5)
, иначе будет вызвано исключение SyntaxError
. Внутри скобок либо создается новая переменная, либо происходит присваивание значения уже существующий переменной.
Чтобы было понятнее, попробуем ввести следующее:
print(number = 10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'number' is an invalid keyword argument for print()
Интерпретатор выдал сообщение об ошибке, поскольку переменная number
не была объявлена до передачи в функцию print()
. А вот если задействовать моржовый оператор ( := )
, то Python отработает без ошибок:
print(number := 10)
10
Таким образом, в одном выражении мы ввели новую переменную и тут же вернули присвоенное ей значение!
"Моржовый" оператор ( := )
можно использовать для упрощения кода в конструкциях if ... else
, в циклах while
, а также в числовых выражениях когда необходимо присвоить значение переменной внутри выражения и одновременно его использовать.
:=
Использование с числовыми выражениями:
# расчет суммы нарастающим итогом:
data = [5, 4, 3, 2]
c = 0
print( [(c := c + x) for x in data] )
[5, 9, 12, 14]
# или произведения нарастающим итогом:
a = 1
print( [ (a := a * b) for b in data] )
[5, 20, 60, 120]
# моржовый оператор в цикле while
i = 0
while ( i := i + 1 ) < 10:
print( i, end=" ")
1 2 3 4 5 6 7 8 9
А вот примеры использования моржового оператора в конструкции if ... else
:
# без моржового оператора
age = int(input("Какой Ваш возраст?"))
if age > 18:
print("Вы уже взрослый !")
else:
print("Вы еще ребенок !")
# с моржовым оператором
if (age := int(input("Какой ваш возраст?"))) > 18:
print("Вы уже взрослый !")
else:
print("Вы еще ребенок !")
phrase = 'В человеке должно быть все прекрасно: и лицо, и одежда, и душа, и мысли …'
if (word := phrase.find('прекрасно')) != -1:
print(phrase[word:])
прекрасно: и лицо, и одежда, и душа, и мысли …
Таким образом, моржовый оператор действительно является хорошим дополнением к языку, и если вы будете использовать его правильно, он может помочь вам сделать код более лаконичным и читабельным.
Оценка основных статистических метрик набора данных в Python
Область эффективного использования lambda функции в Python
Логические выражения if ... else в Pythonic стиле
Способы удаления лишних пробелов в строке
Комментариев нет.