Почему Python не выдает исключения типов с определениями функций «-> type»?

В других языках что-либо подобное этому примеру вызывает ошибку типа. Почему не в Питоне?

>>> def foo(a:int) -> str:
    return a+1

>>> foo(5)
6

person Trimax    schedule 11.08.2016    source источник


Ответы (1)


Подсказка типов в Python — это дополнительное дополнение, помогающее статическому анализу кода и редакторам.

Из спецификации PEP 484 — Подсказки типов. :

Обратите внимание, что этот PEP по-прежнему явно НЕ предотвращает другое использование аннотаций, а также не требует (или запрещает) какую-либо конкретную обработку аннотаций, даже если они соответствуют этой спецификации. Это просто обеспечивает лучшую координацию, как это сделал PEP 333 для веб-фреймворков.

и

Хотя эти аннотации доступны во время выполнения через обычный атрибут __annotations__, во время выполнения проверка типов не выполняется. Вместо этого в предложении предполагается существование отдельной автономной программы проверки типов, которую пользователи могут добровольно запускать со своим исходным кодом. По сути, такая проверка типов действует как очень мощный линтер. (Хотя отдельные пользователи, конечно, могли бы использовать аналогичную программу проверки во время выполнения для принудительного применения Design By Contract или оптимизации JIT, эти инструменты еще не настолько зрелые.)

Обратите внимание, что подсказки типов — это совсем новое дополнение к Python, а PEP предназначен для помощи в координации, а не для принудительной проверки типов языка во время выполнения.

Python - это не язык со статической типизацией, он по-прежнему очень динамично типизирован. Вы можете спутать эту функцию с объявлениями типов в статически типизированных языках.

В будущем возможно, Python добавит поддержку строгого режима (аналогично тому, как Hack делает это), но сейчас это не обсуждается.

person Martijn Pieters    schedule 11.08.2016