Программы
Моржовый оператор в Python3.8

Моржовый оператор в Python3.8

Вышла первая альфа версия Python 3.8 – самое время поглядеть, что нового добавили в язык!

В новой версии Python (3.8) разработчики планируют добавить новый оператор – "walrus operator". PEP по данному оператору можно поглядеть тут.

В общем виде его можно записать как

переменная := выражение

Однако, в отличии от операции присвоения (=), результат моржового оператора также является выражением и может быть использован для, например, сравнения:

if (match := pattern.search(data)) is not None:
    # Do something with match

То есть мы получаем результат поиска по регулярке и сразу проверяем, сматчилось ли. С обычным оператором присвоения мы бы получили syntax error.

Наконец-то можно будет писать C-style while-ы:

while chunk := file.read(8192):
    process(chunk)

И даже несколько странно выглядящие list comprehension:

filtered_data = [y for x in data if (y := f(x)) is not None]

И если первые два примера мне кажутся вполне логичными и напрашивающимися, то в 3-ем я начинаю чувствовать нарушение import this – философии питона. Новая возможность языка даёт новые возможности запутаться.

И можно сказать, что программисты должны думать о красоте и читаемости кода ("с большой силой приходит большая ответственность" и т.д.). Но, практика показывает, что многих устраивает, что их программа не падает с syntax error.

В любом случае, теоретизировать и обсуждать поздно – PEP принят и будет реализован в рамках Python 3.8. Что ж, ждём!

Ещё один пример Изображение Python 3.11. Что нового?