Утверждено добавление в Python операторов для сопоставления с образцом
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Руководящий совет проекта Python утвердил добавление в язык операторов для сопоставления с образцом (match и case). Поддержка новых операторов появится в выпуске Python 3.10. Новые операторы "match" и "case" позволят улучшить читаемость кода, упростят сопоставление произвольных Python-объектов и отладку, а также повысят надёжность кода благодаря возможности расширенной статической проверки типов.
Реализация во многом напоминает оператор "match", предоставляемый в языках Scala, Rust и F#, который выполняет сравнение результата выполнения указанного выражения со списком образцов, перечисленных в блоках на основе оператора "case". В отличие от оператора "switch", доступного в языках Си, Java и JavaScript, выражения на основе "match" предлагают гораздо более широкую функциональность.
def http_error(status):
match status:
case 400:
return "Bad request"
case 401|403|404:
return "Not allowed"
case 418:
return "I'm a teapot"
case _:
return "Something else"
Например, возможна распаковка объектов, кортежей, списков и произвольных последовательностей для привязки переменных на основе имеющихся значений. Допускается определение вложенных шаблонов, использование в шаблоне дополнительных условий "if", применение масок ("[x, y, *rest]"), маппинга связок ключ/значение (например, {"bandwidth": b, "latency": l} для извлечения значений "bandwidth" и "latency" и словаря), извлечения подшаблонов (оператор ":="), использования именованных констант в шаблоне. В классах возможна настройка поведения при сопоставлении при помощи метода "__match__()".
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
def whereis(point):
match point:
case Point(0, 0):
print("Origin")
case Point(0, y):
print(f"Y={y}")
case Point(x, 0):
print(f"X={x}")
case Point():
print("Somewhere else")
case _:
print("Not a point")
match point:
case Point(x, y) if x == y:
print(f"Y=X at {x}")
case Point(x, y):
print(f"Not on the diagonal")
RED, GREEN, BLUE = 0, 1, 2
match color:
case .RED:
print("I see red!")
case .GREEN:
print("Grass is green")
case .BLUE:
print("I'm feeling the blues :(")
Ранее, попытки реализации операторов сопоставления с образцом предпринимались в 2001 и 2006 годах (pep-0275, pep-3103), но были отвергнуты в пользу оптимизации конструкции "if ... elif ... else" для составления цепочек сопоставления. На этот раз также не обошлось без разделения мнений и для конечного принятия решения в качестве арбитра был привлечён руководящий совет, который сумел придти к консенсусу.
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://mail.python.org/archiv...)
- OpenNews: Гвидо ван Россум предложил включить в Python операторы для сопоставления с образцом
- OpenNews: Недоработка в Python-скрипте могла привести к неверным результатам в более 100 публикациях по химии
- OpenNews: Python переходит на новый цикл формирования значительных выпусков
- OpenNews: Выпуск языка программирования Python 3.9
- OpenNews: В пакетном менеджере PIP прекращена поддержка Python 2
Похожие новости:
- [Python, Django] Зачем вам может понадобиться SITE_ID в настройках Django
- [Системное администрирование, Python, IT-инфраструктура, Help Desk Software] Root cause анализ инцидентов на корреляциях между временными рядами метрик ИТ-инфраструктуры
- [Open source, Python, Natural Language Processing, Голосовые интерфейсы] Новые возможности для Python-разработчиков: SmartApp Framework в open source
- [Python, Big Data, GitHub] Я спарсил больше 1000 топовых Github-профилей по машинному обучению и вот что я узнал (перевод)
- [Python, SQL] Создаем схему базы данных на SQLAlchemy
- [Python, Машинное обучение, Искусственный интеллект, Data Engineering, TensorFlow] Рецепт обучения нейросетей (перевод)
- [Python, Программирование, Django] Конвертеры маршрутов в Django 2.0+ (path converters)
- [Python, Графический дизайн] Python, Треугольник Серпинского, и не только…
- [Python, Программирование] Использование статистических методов для анализа временных рядов
- [Python, API] LongPoll в vk_api
Теги для поиска: #_python, #_pattern
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 02:51
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Руководящий совет проекта Python утвердил добавление в язык операторов для сопоставления с образцом (match и case). Поддержка новых операторов появится в выпуске Python 3.10. Новые операторы "match" и "case" позволят улучшить читаемость кода, упростят сопоставление произвольных Python-объектов и отладку, а также повысят надёжность кода благодаря возможности расширенной статической проверки типов. Реализация во многом напоминает оператор "match", предоставляемый в языках Scala, Rust и F#, который выполняет сравнение результата выполнения указанного выражения со списком образцов, перечисленных в блоках на основе оператора "case". В отличие от оператора "switch", доступного в языках Си, Java и JavaScript, выражения на основе "match" предлагают гораздо более широкую функциональность. def http_error(status):
match status: case 400: return "Bad request" case 401|403|404: return "Not allowed" case 418: return "I'm a teapot" case _: return "Something else" from dataclasses import dataclass
@dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origin") case Point(0, y): print(f"Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Somewhere else") case _: print("Not a point") match point: case Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"Not on the diagonal") RED, GREEN, BLUE = 0, 1, 2 match color: case .RED: print("I see red!") case .GREEN: print("Grass is green") case .BLUE: print("I'm feeling the blues :(") =========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 02:51
Часовой пояс: UTC + 5