Что такое подсказки типа в Python 3.5


один из обсуждаемых функций в Python 3.5 считается type hints.

пример type hints упоминается в этом статьи и этой в то же время упоминая использовать подсказки типа ответственно. Может кто-нибудь объяснить больше об этом и когда его следует использовать, а когда нет?

3 155

3 ответа:

я бы предложил чтение PEP 483 и PEP 484 и смотришь этой презентация Гвидо по типу намеков.

в двух словах:намек на тип-это буквально то, что означают слова, вы намекаете на тип объекта(ов), который вы используете.

из-за динамический характер питона, вывод или проверка типа используемого объекта особенно трудный. Этот факт затрудняет для разработчиков понимание того, что именно происходит в коде, который они не написали, и, самое главное, для инструментов проверки типов, найденных во многих IDE [PyCharm, PyDev приходят на ум], которые ограничены из-за того, что у них нет никакого индикатора того, какой тип объектов есть. В результате они прибегают к попытке определить тип С (как указано в презентации) около 50% успеха.


чтобы взять два важных слайда из типа Намекая презентация:

Зачем Вводить Подсказки?

  1. Помогает Ввести Шашки: намекая на то, какой тип вы хотите, чтобы объект был проверкой типа, можно легко обнаружить, если, например, вы передаете объект с типом, который не ожидается.
  2. помогает с документацией: третий человек, просматривающий ваш код, будет знать, что ожидается, где, следовательно, как его использовать, не получая их TypeErrors.
  3. помогает IDE разрабатывать более точные и надежные инструменты: среды разработки будут лучше подходить для предложения соответствующих методов, когда вы знаете, какой тип вашего объекта. Вы, вероятно, испытали это с какой-то IDE в какой-то момент, попав в . и имеющие методы / атрибуты всплывают, которые не определены для объекта.

зачем использовать статический тип Шашки?

  • найти ошибки рано: это самоочевидно, я считаю.
  • чем больше ваш проект, тем больше он вам нужен: опять же, имеет смысл. Статические языки обеспечивают надежность и контроль, что динамических языков не хватает. Чем больше и сложнее становится ваше приложение, тем больше контроля и предсказуемости (от поведенческий аспект) вы требуете.
  • большие команды уже работает статический анализ: я думаю, это подтверждает первые два пункта.

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

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


тип намекая с mypy:

чтобы сделать этот ответ более полным, я думаю, что небольшая демонстрация будет подходящей. Я буду использовать mypy, библиотека, которая вдохновила подсказки типа, как они представлены в ЭНЕРГИЯ. Это в основном написано для тех, кто сталкивается с этим вопросом и задается вопросом, с чего начать.

прежде чем я это сделаю, позвольте мне заявить следующее: PEP 484 ничего не навязывает; это просто установка направления для функции аннотации и предложения руководящих принципов для как проверка типа может/должна быть выполнена. Вы можете аннотировать свои функции и подсказка столько вещей, сколько вы хотите; ваши скрипты будут по-прежнему работать независимо от наличия аннотации, потому что сам Python их не использует.

в любом случае, как отмечено в PEP, типы намеков обычно должны принимать три формы:

  • аннотации функции. ( PEP 3107)
  • стаб-файлы для встроенных/пользовательских модулей.
  • специальные # type: type комментарии, которые дополняют первые две формы. (См.: что такое аннотации переменных в Python 3.6? для обновления Python 3.6 для # type: type комментарии)

кроме того, вы хотите использовать подсказки типа в сочетании с новым typing

добавляя к сложному ответу Джима:

Регистрация typing модуль -- этот модуль поддерживает подсказки типа, как указано PEP 484.

например, функция, приведенная ниже, принимает и возвращает значения типа str и аннотируется следующим образом:

def greeting(name: str) -> str:
    return 'Hello ' + name

The typing module также поддерживает:

  1. тип антиалиасинга.
  2. тип намекала обратный звонок функции.
  3. дженериков - абстрактные базовые классы были расширены для поддержки подписки для обозначения ожидаемых типов для элементов контейнера.
  4. пользовательские универсальные типы - пользовательский класс может быть определен как универсальный класс.
  5. любого типа - каждый тип является подтипом любого.

недавно выпущенный PyCharm 5 поддерживает тип намека. В своем блоге об этом (см. Python 3.5 тип намекая в PyCharm 5) они предлагают отличное объяснение какие подсказки типа есть и нет наряду с несколькими примерами и иллюстрациями того, как использовать их в коде.

кроме того, он поддерживается в Python 2.7, как описано в комментарий:

PyCharm поддерживает модуль ввода из PyPI для Python 2.7, Python 3.2-3.4. для 2.7 вы должны поместить подсказки типа в *.файлы заглушки pyi с момента добавления аннотаций функций в Python 3.0.