Операторы case и match в Python 3.10

В этой статье мы рассмотрим использование новых операторов сопоставления шаблонов в Python.

Объектно-ориентированный язык программирования Python должен получить новую возможность в версии 3.10, которая в основном известна из функциональных языков: сопоставление шаблонов. Изменение вызвало споры в сообществе Python и вызвало бурные дебаты.

Сопоставление по шаблону — это метод символьной обработки, использующий шаблон для идентификации дискретных структур или подмножеств, например, строк, деревьев или графиков. Эта процедура встречается в функциональных или логических языках программирования, где выражение сравнения используется для обработки данных на основе их структуры, например, в Scala, Rust и F#. Оператор соответствия принимает выражение и сравнивает его с последовательными шаблонами, указанными в одном или нескольких случаях. Это внешне похоже на оператор switch на C, Java или JavaScript, но гораздо мощнее.

Теперь в Python 3.10 также будет реализовано выражение сравнения. Реализация описана в PEP 634. То, как должно работать функция сравнения выражений показано на этом очень простом примере, где значение сравнивается с несколькими буквами:

В этой статье мы рассмотрим использование новых операторов сопоставления шаблонов в Python.

В последнем случае оператор сравнения сравнивает подчеркивание, где знак _ выступает в качестве плацдарма, который перехватывает все. Это вызывает раздражение у разработчиков, поскольку подчеркивание обычно используется на Python перед именами переменных, чтобы объявить их для внутреннего использования. Хотя Python не делает различий между частными и общедоступными переменными так же строго, как Java, это всё же очень широко используемая конвенция, которая также указана в Руководстве по стилям для Python Code.

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

Это приводит к тому, что на Python мы внезапно сталкиваемся с константами Шредингера, которые остаются неизменными только до тех пор, пока мы не рассмотрим их более подробно в операторе соответствия. Следующий пример призван объяснить это:

В этой статье мы рассмотрим использование новых операторов сопоставления шаблонов в Python.

Вывод программы:

В этой статье мы рассмотрим использование новых операторов сопоставления шаблонов в Python.

Такое поведение приводит к резкой критике предложения со стороны опытных разработчиков Python, таких как Брэндон Роудс, автор книги «Основы сетевого программирования на Python»:

Если эта плохо продуманная функция сравнения шаблонов действительно добавлена в Python, мы теряем принцип, которому я всегда учил студентов: «если вы видите незадокументированную константу, вы всегда можете назвать ее, не меняя значения кода». Принцип подстановки, выученный на алгебре? Он больше не будет применяться.

Однако многие давние разработчики Python не только ворчат по поводу структурного соответствия, которое должно появится в Python 3.10. В целом они сожалеют о событиях последних лет, когда над языком посыпалось всё больше и больше синтаксического сахара. Оригинальные принципы, заложенные в Zen Python, будут забыты, а функциональная стабильность утрачена.

В Твиттере и других социальных сетях всегда присутствует критика, как это происходит сейчас в случае структурного совмещения паттернов. Фактически, эта тема уже интенсивно обсуждалась в сообществе Python. Руководящий совет Python рекомендовал принять предложения уже в декабре 2020 года. Тем не менее с принятием предложений эта тема реально закипела. Причина этого, несомненно, заключается в размере и разнообразии сообщества Python. Большинство программистов, вероятно, интересуются только обсуждениями расширений, которые решают их собственные проблемы. Другие разработки игнорируются до тех пор, пока PEP не будут приняты. Вероятно, это относится и к подбору структурных схем. Это открывает возможности для решения проблем, которые раньше были вряд ли возможны на Python. Например, это позволяет специалистам по данным писать соответствующие парсеры и компиляторы, для которых им ранее приходилось прибегать к функциональным или логическим языкам программирования.

С принятием PEP дискуссия теперь перешла к более широкому сообществу Python. Кстати, Бретт Кэннон, член руководящего совета Python, в интервью отметил, что последнее слово еще не сказано: до первой бета-версии еще есть время для изменений, если возникнут проблемы в практически используемом коде. Он также указал на возможность изменения значения ключевого слова _ еще раз.

close

Изучаешь Python?

Оформи подписку и получи моментальный доступ к новым публикациям

Если вы ищите способ системно подойти к обучению языка программирования Python, рекомендую записаться на курсы онлайн обучения.

Поделиться записью в социальных сетях


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

Ваш адрес email не будет опубликован