Состояние необязательной статической печати в Python?

Я уже некоторое время играю с Typscript, и должен сказать, что учитывая тот факт, что nodejs быстрее, чем текущая реализация CPython для моих нужд веб-разработки, я был более склонен делать с ним больше вещей.

Фактически, я сделал с ним пару базовых приложений, даже для настольных компьютеров. Что мне нравится в Typescript, так это то, что в нем есть необязательные статические типы. Это часто делает кодирование намного проще, не говоря уже о том, что intellisense великолепен, когда вы хотите быстро написать код и запустить прототип. Я тоже сталкивался с меньшим количеством ошибок в процессе разработки.

Но вот в чем проблема: я работаю с Python уже год, мне нравится этот язык, и я просто больше привык к синтаксису. Однако все больше и больше я вижу, что дополнительная статическая типизация может быть отличным плюсом для Python. Итак, я провел небольшое исследование, сначала я попытался понять, что такое статическая типизация прямо сейчас. Как и любой другой, я использовал поисковую систему, чтобы это выяснить.

Вот некоторые из источников информации, которые я прочитал:

  1. Добавление дополнительного статического ввода в Python

Если вы посмотрите на реализацию здесь (отрывок из ссылки выше):

from StringIO import StringIO

def foo(f: StringIO) -> str:
    f.write("hello")
    return f.getvalue()

f1 = StringIO("booh+")
print foo(f1)  # prints "booh+hello"

Теперь это очень похоже на реализацию в Typescript. Однако если вы посмотрите на дату, она восходит к 2004 году.

Затем я еще раз взглянул на слайд, сделанный BDFL, Гвидо:

  1. Зачем нужен статический ввод?

Опять же, вы видите ту же риторику. Однако мне не удалось найти никакой новой информации по этому поводу.

Я также просмотрел @ this SO answer о применении статических типов.

Итак, я хотел спросить, какова ситуация или состояние добавления необязательной статической типизации в Python? Или нам нужно изобрести что-то вроде Typescript, но для Python 3?

Я считаю, что необязательная статическая типизация важна, потому что на моем собственном очень ограниченном опыте я видел, что что-то вроде Typescript и C # работают лучше, поскольку при создании сложных классов или больших проектов я видел, что статическая типизация давно прошла. способ помочь мне писать код быстрее и без ошибок. Я уверен, что я далеко не так хорош, как большинство здесь разработчиков, но это мое мнение. Вот почему я считаю этот вопрос важным. Я имею в виду, что если бы у вас была дополнительная типизация такого языка, как C #, с красивым синтаксисом, предоставляемым Python, то Python, вероятно, был бы неудержим (ура!).

Я провел некоторое исследование по этому поводу, но у меня не было ничего существенного, поэтому я надеялся, что некоторые из замечательных и мудрых членов SO прольют свет на эту проблему.


person Games Brainiac    schedule 21.08.2013    source источник
comment
Это похоже на mypy-lang.org   -  person Antti Haapala    schedule 21.08.2013
comment
А как насчет cython? (Я не уверен, что вы ищете)   -  person rdbisme    schedule 16.04.2017
comment
@SolidSnake Cython использует типы для оптимизации сгенерированных двоичных файлов; поэтому его типы по сути такие же, как типы времени выполнения Python, вы просто объявляете их заранее. Он отлично подходит для своей цели, но система типов времени выполнения Cython / python бесполезна для какой-либо нетривиальной проверки статического типа (в качестве простого примера в ней нет универсальных типов).   -  person max    schedule 16.04.2017


Ответы (1)


Или нам нужно изобрести что-то вроде Typescript, но для Python 3?

Это mypy !!! :-)

Лично я думаю, что либо они собираются объединиться, либо Python предложит собственное решение. Надеюсь, это произойдет очень скоро !!!

person Mario Rossi    schedule 21.08.2013
comment
К сожалению, еще далеко до удобства статической типизации в C #. - person Erwin Mayer; 16.03.2016
comment
Проект mypy не объединен с python, но он совместим со средой подсказки типов python (которая была добавлена ​​в python 3.5 как PEP 484). mypy также служит полигоном для любых изменений этого и других PEP, связанных с набором текста. - person max; 16.04.2017
comment
По состоянию на 2019 год mypy является эталонным средством проверки типов для Python. Гвидо (создатель Python) является одним из его разработчиков, и существует множество официальных PEP, связанных с необязательными статическими типами в Python: PEP 484 (Type Hints), PEP 589 (TypedDict), PEP 586 (Literal Types) - person David Foster; 13.09.2019