Урок 46 Type Hints

Улучшаем читаемость кода с помощью аннотаций типов

⏱ ~10 мин чтения· 📘 Базовый

Что такое type hints?

Аннотации типов — способ указать, какого типа аргументы ожидает функция и что она возвращает. Python не проверяет типы во время выполнения, но IDE и линтеры используют их для подсказок.

# Без аннотаций
def greet(name, age):
    return f"{name}, {age} лет"

# С аннотациями (type hints)
def greet(name: str, age: int) -> str:
    return f"{name}, {age} лет"

Основные типы

def process(
    name: str,           # строка
    age: int,            # целое число
    score: float,        # число с плавающей точкой
    active: bool         # логическое значение
) -> str:                # возвращает строку
    return f"{name}: {age} лет, балл {score}, активен: {active}"

# Переменные тоже можно аннотировать
x: int = 42
names: list[str] = ["Анна", "Борис"]
data: dict[str, int] = {"x": 10, "y": 20}

Сложные типы

# Список строк
def get_names() -> list[str]:
    return ["Анна", "Борис"]

# Словарь: строки → числа
def get_grades() -> dict[str, int]:
    return {"Анна": 95, "Борис": 82}

# Кортеж из трёх элементов
def get_point() -> tuple[int, int, int]:
    return (10, 20, 30)

# Опциональное значение (может быть None)
def find_user(id: int) -> str | None:
    if id == 1:
        return "Анна"
    return None

# Один из нескольких типов
def process(value: int | str) -> str:
    return str(value)

Практическая ценность

💡 Примечание: В старых примерах кода (до Python 3.9) можно встретить импорт from typing import List, Dict, Tuple, Optional, Union. Современный синтаксис (list, dict, tuple, X | None, X | Y) предпочтительнее и не требует импорта.

  • IDE (VS Code, PyCharm) показывает автодополнение и предупреждения
  • Код становится самодокументированным
  • Инструменты типа mypy находят ошибки до запуска
# mypy найдёт ошибку:
def double(x: int) -> int:
    return x * 2

double("hello")  # mypy: error: Argument 1 to "double" has incompatible type "str"