Моржовый оператор в Python: руководство

    Команда Simple-Server
    03.06.2026
    4 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Как работает оператор моржа Python

    Новый оператор присваивания, появившийся в Python version 3.8, совмещает функцию присвоения значения переменной с возвратом этого значения. Чтобы было понятнее, для начала введем следующее:

    На выходе мы получили ожидаемое сообщение об ошибке от интерпретатора, поскольку переменная _apples_ не была объявлена. А теперь давайте задействуем «моржа»:

    В одном выражении мы ввели новую переменную и тут же вернули присвоенное значение, удобно! Это та функция, которую долго ждали многие разработчики Python.

    Напишем программку, в которой пользователю предлагается ввести любую фразу или нажать Enter (в последнем случае программа выйдет из цикла, поскольку ввод вернет пустую строку, и перейдет к последней фразе). В более ранних версиях это было возможно написать только таким способом:

    expression = input('Введите что-нибудь или просто нажмите Enter: ') while expression != '': print('Отлично!') expression = input('Введите что-нибудь или просто нажмите Enter: ') print('Надоело? Ладно, пока.')

    Можете скопировать код выше в IDLE и посмотреть, как он будет работать. Однако, если мы будем использовать моржовый оператор, то существенно сократим код, в данном случае с пяти строчек до трех:

    while(expression := input('Введите что-нибудь или просто нажмите Enter: ') != ''): print('Отлично!') print('Надоело? Ладно, пока.')

    «Морж» позволил нам поместить переменную с командой на присвоение этой переменной значения из пользовательского ввода прямо внутрь цикла while , что сэкономило пару строк кода. И работать это будет точно так же:

    Введите что-нибудь или просто нажмите Enter: Simple-Server Отлично! Введите что-нибудь или просто нажмите Enter: new expressions with value assignment Отлично! Введите что-нибудь или просто нажмите Enter: Use functional code! Отлично! Введите что-нибудь или просто нажмите Enter: *нажимает Enter* Надоело? Ладно, пока.

    Вы, наверное, уже заметили, что «морж» присваивает значения переменным только внутри других выражений, то есть в подвыражениях: это одна из его особенностей. Теперь еще один пример, но уже с моржовым оператором внутри условного выражения.

    Применение walrus Python с условными конструкциями

    Напишем фразу и присвоим ей значение переменной, а затем найдем какое-нибудь слово в этой фразе по условию:

    phrase = 'Я узнал, что у меня есть огромная семья: и тропинка, и лесок, в поле каждый колосок…' word = phrase.find('тропинка') if word != -1: print(phrase[word:])

    Запись _[word:]_ позволяет нам получить такой вывод:

    тропинка, и лесок, в поле каждый колосок…

    А теперь давайте сократим код с использованием моржового оператора. И вместо:

    word = phrase.find('тропинка') if word != -1: print(phrase[word:]) if(word := phrase.find('тропинка')) != -1: print(phrase[word:])

    В данном случае по объему выиграли немного, зато уменьшили количество строк. Далее заметим, что, несмотря на сокращение времени на написание кода, моржовый оператор не всегда упрощает его чтение. Однако во многих случаях это лишь вопрос привычки, так что с практикой вы научитесь легко читать код с «моржами».

    Walrus Python с числовыми выражениями

    Напоследок приведем пример из еще одной области, в которой применение моржового оператора помогает оптимизировать работу программ. Это операции с числами. Напишем несложную программу для возведения в степень:

    def pow(number,power): print('Вызываем pow') result = 1 while power: result *= number power -= 1 return result

    И теперь введем в интерпретаторе следующее:

    >>> [pow(number, 2) for number in range(3) if pow(number, 2) % 2 == 0] Вызываем pow Вызываем pow Вызываем pow Вызываем pow Вызываем pow [0, 4, 16]

    Перепишем ввод в интерпретаторе с помощью моржового оператора:

    >>> [p for number in range(3) if(p := pow(number, 2)) % 2 == 0] Вызываем pow Вызываем pow Вызываем pow [0, 4, 16]

    Как видим, код сократился не слишком сильно, зато количество вызовов функции уменьшилось почти вдвое, а значит, программа будет работать быстрее!


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490₽

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190₽

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны