Подсказки по типам Python: статическая типизация и аннотации

Узнайте, как писать подсказки типов в Python. Улучшите качество кода, включите автодополнение и используйте mypy для статического анализа кода.

Попробуйте в редакторе

Обзор

Исторически Python является динамически типизированным языком, то есть интерпретатор определяет типы переменных во время выполнения, что дает разработчикам скорость и гибкость. Однако по мере роста кодовых баз такая гибкость динамической типизации может привести к запутанным ошибкам во время выполнения, например, при передаче списка функции, которая ожидает строку. Чтобы устранить этот пробел, вPython 3.5 введены подсказки типов (аннотации типов), позволяющие разработчикам явно документировать ожидаемые типы в коде.

Подсказки типов не влияют на то, как Python выполняет ваш код; интерпретатор полностью игнорирует их во время выполнения. Вместо этого их ценность заключается в статическом анализе и инструментах IDE. Добавляя аннотации типов к переменным, параметрам функций и возвращаемым типам, ваша IDE может обеспечить точное автодополнение и мгновенно отмечать ошибки несоответствия типов. Такие инструменты, как mypy, могут сканировать вашу кодовую базу перед развертыванием, чтобы статически выявлять ошибки, имитируя проверки во время компиляции таких языков, как TypeScript или Java.

Возможности ввода текста в Python обширны. Вы можете аннотировать базовые типы, такие как `str`, `int` и `bool`, или использовать расширенные типы из встроенного модуля `typing` (или стандартных коллекций вPython 3.9+), например `list[str]`, `dict[str, int]` и `tuple[float, float]`. Такие функции, как Union (или оператор канала `|` вPython 3.10+), позволяют параметрам принимать несколько типов, а `Optional[T]` представляет значение, которое может быть определенного типа или `None`. Реализация подсказок по типам значительно улучшает читабельность и совместную работу команды.

Код и вывод выполнения

Написание функции с аннотациями типов и проверка того, как она принимает входные данные.

# Type annotations for function parameters and return values
def greeting(name: str, count: int) -> str:
    return f"Hello {name}! " * count

# Type hints on standard collections (Python 3.9+)
user_roles: dict[str, str] = {
    "admin": "Alice",
    "moderator": "Bob"
}

message = greeting("Jane", 2)
print(message)
print(f"Roles configured: {user_roles}")
Терминальный выход
Hello Jane! Hello Jane! 
Roles configured: {'admin': 'Alice', 'moderator': 'Bob'}

Пошаговая реализация

  • Предотвращение ошибок интеграции в кодовых базах больших команд.
  • Включение автодополнения кода IDE в сложных проектах кода
  • Создание самодокументируемых структур API и схем проверки.

Часто задаваемые вопросы

Обеспечивают ли подсказки типов безопасность типов во время выполнения?

Нет. Python не генерирует исключения ошибок, если вы передаете тип, отличный от аннотированной подсказки. Чтобы обеспечить проверку типов, вы должны запустить статические программы проверки, такие как mypy.

В чем разница между Anyи Union?

Any отключает проверку типа переменной, позволяя ей хранить что угодно. Union (или T | U) ограничивает переменную определенным, определенным подмножеством типов.

Связанные темы

Рекомендуемые ресурсы Python

Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.