Операторы 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, мы теряем принцип, которому я всегда учил студентов: «если вы видите незадокументированную константу, вы всегда можете назвать ее, не меняя значения кода». Принцип подстановки, выученный на алгебре? Он больше не будет применяться.

Так же у меня есть группа ВКонтакте @yegorovegor. Обязательно подпишись!

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

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

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

close

Изучаешь Python?

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

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


GeekUniversity - обучение до уровня Middle с гарантированным трудоустройством


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

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