Моржовый оператор := в Python

Оператор := был назван моржовым за визуальное сходство с глазами и бивнями моржа, лежащего на боку. (Это не шутка! ;-)). Моржовый оператор появился в версии Python 3.8, но до сих пор ведутся споры о его целесообразности. Так или иначе, «если звезды зажигают — значит — это кому-нибудь нужно?». Поэтому познакомимся с моржовым оператором поближе и рассмотрим, в каких случаях применение := может быть полезным.

Зачем нужен моржовый оператор?

Оператор := — это оператор присваивания, который отличается от привычного нам оператора = тем, что возвращает присвоенное значение. Чтобы понять, как этот оператор работает, и в каких случаях может быть полезным, рассмотрим примеры:

Примеры использования моржового оператора

Пример №1. Присваиваем значение переменной и выводим его на экран:
print( a: = 5 )
 Вывод на экран:
 5 

Обратите внимание, что оператор := работает только в Python, начиная с версии 3.8!

Если мы заменим моржовый оператор на обычный оператор присваивания «=», то получим сообщение об ошибке:

print(a = 5)
 Вывод на экран:
 TypeError: 'a' is an invalid keyword argument for print()

Пример №2. Используем моржовый оператор := в Python в условных выражениях:

Создадим блок с условием, который будет выводить значение переменной a, если оно больше 5. Использование моржового оператора позволяет нам инициализировать переменную a прямо в блоке if:

 # с оператором ":="
 if (a:=5) > 0:
     print(a)
 Вывод на экран:
 5 

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

# без оператора ":="
a = 5
if(a > 0):
    print(a)
 Вывод на экран
 5 
Пример №3. Использование моржового оператора в генераторах списка:

В приведенном ниже примере будем генерировать список res из значений, превышающих 1, и полученных при целочисленном делении на 2 элементов списка lst:

 # С оператором ":="
 lst = [0, 2, 4]
 res = [d for i in lst if (d := i//2) > 1]
 print(res)
 Полученный результат:
 [2] 

На заметку: оператор // — это оператор целочисленного деления. Узнать больше о математических операторах в Python можно по ссылке: «Математические операции в Python».

Без использования моржового оператора нам пришлось бы дважды записывать выражение i//2, как в приведенном ниже коде:

 # без оператора ":="
 lst = [0, 2, 4]
 res = [i//2 for i in lst if i//2 > 1]
 print(res)
 Полученный результат:
 [2] 
Пример №4. Использование оператора « := » при считывании вводимой с клавиатуры информации:

Напишем код считывания введенных с клавиатуры символов. До тех пор, пока пользователь не введет клавишу выхода „q“ введенные пользователем символы будут отображаться на экране. Использование морового оператора в данном случае позволяет сократить код до двух строк:

while (word := input()) != 'q':
    print(word)

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

word = input()
while (word != 'q'):
    print(word)
    word = input()
У нас появился Telegram-канал для изучающих Python! Подписывайтесь по ссылке: Кодим на Python!
Вместе «питонить» веселее! 😉

Исходя из приведенных выше примеров, можно сделать вывод, что использование моржового оператора позволяет сделать код более лаконичным. Да, это так называемый «синтаксический сахар», конструкция, без которой можно обойтись. Однако, неоспоримое преимущество — более короткий код — превращает оператор := в эффективную конструкцию Python >= 3.8

Добавить комментарий