Pull to refresh

Comments 11

А потом ты пытаешься типизировать код, использующий numpy, и попадаешь в ад, где чуть ли не каждое второе выражение приходится заворачивать в typing.cast().

В numpy есть свой numpy.typing.

Не особо помогает. Система типов не может понять, что если x: ndarray[[int, int], float32], то x[0] будет ndarray[[int], float32]. И я её не особо виню, учитывая сколько вариантов адресации есть у массивов в numpy. А уж про массивы, одно из измерений которых имеет фиксированный размер, и говорить нечего. Тут типы - это просто документация в коде, и не более...

type Point = tuple[float, float]
type RouteMap = dict[str, list[Point]]

Не очень понятно, зачем тут алиасы, если надежнее сделать любой DTO

Теперь, чтобы передать туда объект, он обязан наследоваться от Closable

Не обязан, тайпхинты всё еще не проверяются в рантайме.

Parsing, not validation: Pydantic не просто говорит «плохо/хорошо». Он занимается парсингом

Проблема пидантика в том, что никто его это не просил делать: на официальном сайте написано "Pydantic is the most widely used data validation library for Python", но по факту он и валидирует, и типы приводит, когда хочет.

Не обязан, тайпхинты всё еще не проверяются в рантайме

Все остальные 99% рантаймов, которые тоже автоматически не проверяют типы и кто от кого наследовался во время исполнения продового кода (ведь туда не кладут DLL с символами):

Скрытый текст

Алиасы это не обязательство, это просто надпись на заборе, а на заборе, как известно, много чего написано. И если ты напишешь ... -> float, а в самой функции напишешь return "", то об этом в большинстве случаев ты узнаешь только в рантайме. Ну и ещё есть куча популярных библиотек, которые клали огромный питон на эти ваши типы

вопрос - зачем, если есть изначально типизированные языки? Просто возьми любой из них.

Имею опыт с беком на питоне (джанга), все пытаюсь его типизировать, но это все еще очень костыльная система.

А потом берешься за фронт на typescript/rust и кайфуешь. Ну, хотя бы open/async api кодогенерация с бека есть, и то хорошо.

А потом кто то узнал что программа на с++ стала более читаемой, выполняется на два порядка быстрее. И пишется тем же клодом по тому же промпту.

Всё что последний год происходит с питоном - типы, потоки, - это попытки устранить его ранее заявленные достоинства - простоту и читаемость.

Поспорю. Читаемость кода с прописанными типами куда выше. В противном случае будешь постоянно играть в увлекательную игру "угадай класс возвращённого объекта по методам, которые вызываются на этом объекте в существующем коде". Просто нужно это использовать без фанатизма: параметры, возвращаемые значения, и локальные переменные содержащие нетривиальные (более двух уровней) структуры данных. Этого вполне хватит. Причём в последнем случае действительно иногда лучше описать промежуточный датакласс-другой.

Sign up to leave a comment.

Articles