Что такое подсказки типа в Python 3.5
один из обсуждаемых функций в Python 3.5
считается type hints
.
пример type hints
упоминается в этом статьи и этой в то же время упоминая использовать подсказки типа ответственно. Может кто-нибудь объяснить больше об этом и когда его следует использовать, а когда нет?
3 ответа:
я бы предложил чтение PEP 483 и PEP 484 и смотришь этой презентация Гвидо по типу намеков.
в двух словах:намек на тип-это буквально то, что означают слова, вы намекаете на тип объекта(ов), который вы используете.
из-за динамический характер питона, вывод или проверка типа используемого объекта особенно трудный. Этот факт затрудняет для разработчиков понимание того, что именно происходит в коде, который они не написали, и, самое главное, для инструментов проверки типов, найденных во многих IDE [PyCharm, PyDev приходят на ум], которые ограничены из-за того, что у них нет никакого индикатора того, какой тип объектов есть. В результате они прибегают к попытке определить тип С (как указано в презентации) около 50% успеха.
чтобы взять два важных слайда из типа Намекая презентация:
Зачем Вводить Подсказки?
- Помогает Ввести Шашки: намекая на то, какой тип вы хотите, чтобы объект был проверкой типа, можно легко обнаружить, если, например, вы передаете объект с типом, который не ожидается.
- помогает с документацией: третий человек, просматривающий ваш код, будет знать, что ожидается, где, следовательно, как его использовать, не получая их
TypeErrors
.- помогает 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 также поддерживает:
- тип антиалиасинга.
- тип намекала обратный звонок функции.
- дженериков - абстрактные базовые классы были расширены для поддержки подписки для обозначения ожидаемых типов для элементов контейнера.
- пользовательские универсальные типы - пользовательский класс может быть определен как универсальный класс.
- любого типа - каждый тип является подтипом любого.
недавно выпущенный 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.