TGViewer
Питонические атаки Питонические атаки @pythonic_attacks · 1.15K subscribers
Post #405 990

Forwarded from Блуждающий форвард

О паттерн матчинге в python.

В 3.10, помимо всего прочего, завезли паттерн матчинг. И вы об этом, конечно, слышали. А вы слышали про functools'овый singledispatch который доступен аж со времён 3.4 и реализует матчинг типов аргументов в функции? Выглядит это так:


Recipient = Email | SmsNumber

@singledispatch
def send_message(message: str, recipient: Recipient):
raise NotImplemented()

@send_message.register
def send_message_via_email(message: str, recipient: Email):
# Send message via email by somehow

@send_message.register
def send_message_via_sms(message: str, recipient: SmsNumber):
# Send message via sms by somehow

some_email = Email('some@email.com')
some_phone = SmsNumber('+123456789')

send_message('message', some_email)
send_message('message', some_phone)


Ну практически haskell, нет? Увы, нет, ведь в python значение — это не то же самое что и тип, поэтому и возможности заматчить по значению у нас в этом случае нет. Но, так или иначе, singledispatch, бывает, здорово помогает организовать код лаконично и читаемо.

А вот чего в python не завезли (по, в целом, понятным причинам) так это возможности запилить sync и async реализации функции под одним именем. И это печально.
  • 👍 6
  • 🔥 1
More from @pythonic_attacks
  1. May 24, 2026GPT-5.5 по дефолту предпочитает использовать uv. Совпадение? Абсолютно точно нет. Логично…
  2. Mar 19, 2026Новость вызывает столько противоречивых мыслей, что я даже прерву радио молчание. С одной…
  3. Mar 19, 2026https://openai.com/index/openai-to-acquire-astral/ & https://astral.sh/blog/openai Это не…
  4. Nov 17, 2025Ну что же.. Мы совместно с Эммой Смит опубликовали Pre-PEP о добавлении Раста в CPython. В…
  5. May 19, 2025Вышел трейлер документалки о Python. Что-то на уровне Marvel, возможно даже выше https://w…
  6. May 15, 2025All good things come to an end Что ж, скажем Майкрософту спасибо, что 4 года содержал кома…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →