← Назад к вопросам
Как указать какой тип данных ожидает функция?
1.0 Junior🔥 211 комментариев
#Python Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Type hints (аннотации типов)
В Python 3.5+ можно указывать ожидаемые типы данных функции через аннотации. Это помогает документировать код и находить ошибки с помощью статических анализаторов.
Базовый синтаксис
def greet(name: str) -> str:
return f"Hello, {name}!"
def add(a: int, b: int) -> int:
return a + b
def process(data: list) -> dict:
return {"count": len(data)}
Аннотация идёт после имени параметра, а -> указывает на тип возвращаемого значения.
Сложные типы
Для работы с параметризованными типами импортируй typing (Python 3.8) или collections.abc (Python 3.9+):
from typing import List, Dict, Optional, Union, Tuple
def process_items(items: List[str]) -> Dict[str, int]:
return {item: len(item) for item in items}
def find_user(user_id: int) -> Optional[Dict]:
# Optional[Dict] = Union[Dict, None]
return {"id": user_id} if user_id > 0 else None
def convert(value: Union[int, float]) -> str:
return str(value)
Современный подход (Python 3.9+)
От 3.9 можно использовать встроенные типы напрямую:
def process_items(items: list[str]) -> dict[str, int]:
return {item: len(item) for item in items}
def find_user(user_id: int) -> dict | None:
return {"id": user_id} if user_id > 0 else None
Callable и функции как параметры
from typing import Callable
def apply_func(func: Callable[[int, int], int], a: int, b: int) -> int:
return func(a, b)
def process_data(processor: Callable[[list], dict]) -> dict:
data = [1, 2, 3]
return processor(data)
Проверка типов
Type hints не обеспечивают проверку в runtime. Для этого используют:
- mypy — статический анализатор
- pydantic — валидация с Pydantic моделями
- runtime-checkable Protocols — проверка интерфейсов
import mypy
# mypy ищет ошибки типов перед запуском
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
# Pydantic автоматически валидирует при создании
user = User(name="John", age=30) # OK
user = User(name="John", age="invalid") # ValidationError
Лучшие практики
Всегда указывай типы для:
- Публичных функций и методов
- Параметров, особенно в больших проектах
- Возвращаемых значений для ясности
Избегай:
Anyбез необходимости- Полагаться на type hints как на валидацию
- Избыточной сложности в аннотациях
Type hints улучшают читаемость, помогают IDE автодополнению и ловят ошибки на ранних стадиях разработки.