Веб-версияОткрыть в Telegram

ПостВ Python 3.12 приняли PEP 695 – Type Parameter Syntax, который добавляет новый синтаксис для дженерик классов, функций и…

22 апреля 2023
П
Питонические атаки
Ссылка
нажмите — покажем
Фотография
нажмите — покажем
Фотография
нажмите — покажем
В Python 3.12 приняли PEP 695 – Type Parameter Syntax, который добавляет новый синтаксис для дженерик классов, функций и алиасов для типов. Это вот то, где используется typing.TypeVar (спойлер: больше нет). Да, это снова про тайп хинты. Похоже, это самая активно развивающаяся область языка за последние 10 лет. Давайте посмотрим на изменение на примере функции с переменными типа (смотри скриншот 1). Если что, это нужно для того, чтобы связать типы нескольких параметров и возвращаемых значений функции. Вот функция принимает на вход значение (любого типа), а на выходе она отдаст значение такого же типа. Часто используемый сценарий, как мне кажется. Такое стало писать намного приятнее. Не нужно отдельно писать это явное, некрасивое определение typing.TypeVar, где ты дважды пишешь одно и то же имя переменной и засоряешь странными однобуквенными именами глобальную область видимости. В 3.12 можно будет просто прям при определении функции задекларировать своё намерение: "я буду тут использовать переменную типа T", и аннотируешь ей все связанные аргументы и возвращаемые значения. Офигенно? О да. Кроме того, тайп-алиасы с переменными типов тоже стало писать намного легче (смотри скриншот 2). Тоже отпала необходимость явно определять TypeVar. Но теперь в языке появляется новое "мягкое" ключевое слово type, которое ведёт себя по-разному в зависимости от контекста (как async). Забавно, что это нововведение фактически депрекейтит PEP 613 про тайп алиасы, который появился в 3.10. Я даже толком не успел начать им пользоваться. Всё так быстро меняется. Про классы-дженерики писать не буду, но если вы такое практикуете, то сходите почитайте док. Там интересно. Отдельно прикольно, что больше не надо думать о ковариантности, контравариантности и инвариантности переменных типов. Эти концепции никуда не уходят, но теперь тайп-чекер будет сам понимать, с чем он работает, без необходимости явного указания. Это вот та штука, из-за которой приходится аргументы функций аннотировать как Sequence[Parent] вместо list[Parent] и которую я долго не мог осознать. Кстати, недавно смотрел хороший видос про эти концепции. Разобрался, вроде. Блин, не может ли недостаток понятных материалов на эту тему быть связан с тем, что эти слова так сложно писать и произносить? Я минуту набирал и перечитывал эти три слова в начале абзаца, да и то наверняка ошибся. Если не думать о том, что это изменение создаёт новую область видимости для имён (scope) с довольно странной механикой работы, добавляет новое мягкое ключевое слово, добавляет новый сорт TypeVar (теперь у нас есть "традиционные" и новые, и их нельзя смешивать между собой) и в целом делает язык синтаксически сложнее (давайте писать квадратные скобки вообще везде), то это абсолютно точно движение в правильную сторону, шаг навстречу программисту. Бойлерплейта станет меньше, импортов из typing меньше, сложных концепций меньше, пространства для ошибки тоже. Да и выглядит относительно предыдущего варианта намного приятнее. Мне нравится.
18 · 2.2K ·

Рядом в ленте

ППитонические атакиНедавно вышла пачка минорных релизов CPython. Очередная порция исправлений и улучшений попала в 3.11.3. Тем временем, метрика поддержки ветки 3.11 в библиотекахППитонические атакиCharlie Marsh, автор быстрого линтера #ruff, основал компанию Astral и сразу же поднял $4m инвестиций. Автор планирует продолжать работать над ruff и другими ин
это сообщение
ППитонические атакиВ AWS Lambda наконец-то добавили рантайм Python 3.10. Вот интересно, они специально зачем-то добавляют новые рантаймы с отставанием в полтора года? Впрочем, всеППитонические атакиПопулярность имеет свои минусы. Чем популярней язык программирования, тем выше его распространённость, а значит найдутся те кто поспешит воспользоваться этим. С
ППитонические атакиПитонические атаки@pythonic_attacks · канал · Технологии
1 148подписчиков629постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем