Практические примеры аннотации
Реальные сценарии аннотации типов
Функции обработки данных
from typing import List, Dict, Optional
def filter_valid_users(users: List[Dict[str, str]]) -> List[Dict[str, str]]:
return [user for user in users if user.get('email')]
def calculate_average(numbers: List[float]) -> Optional[float]:
return sum(numbers) / len(numbers) if numbers else None
Взаимодействие с API и сетью
from typing import Union, Dict, Any
def fetch_api_data(endpoint: str) -> Union[Dict[str, Any], None]:
try:
## Simulated API request
return {"status": "success", "data": [1, 2, 3]}
except Exception:
return None
Обработка ошибок и аннотации типов
from typing import Tuple, Union
def divide_numbers(a: float, b: float) -> Union[float, str]:
try:
return a / b
except ZeroDivisionError:
return "Division by zero error"
Сравнение стратегий аннотации
Сценарий |
Тип возвращаемого значения |
Стратегия аннотации |
Сложность |
Простой расчет |
Числовой |
Прямой тип |
Низкая |
Фильтрация данных |
Список |
Универсальный тип |
Средняя |
Обработка ошибок |
Объединение |
Несколько возможных возвращаемых значений |
Высокая |
Процесс аннотации типов
graph TD
A[Function Input] --> B{Process Data}
B --> C{Validate Return}
C --> |Valid Type| D[Return Annotated Result]
C --> |Type Mismatch| E[Raise Type Error]
Продвинутые техники аннотации
from typing import Callable, TypeVar
T = TypeVar('T')
R = TypeVar('R')
def apply_transform(
data: List[T],
transformer: Callable[[T], R]
) -> List[R]:
return [transformer(item) for item in data]
Аннотации типов для декораторов
from typing import Callable, Any
def log_return(func: Callable[..., Any]) -> Callable[..., Any]:
def wrapper(*args: Any, **kwargs: Any) -> Any:
result = func(*args, **kwargs)
print(f"Function returned: {result}")
return result
return wrapper
@log_return
def example_function(x: int) -> str:
return str(x * 2)
Лучшие практики
- Используйте точные аннотации типов.
- Обрабатывайте крайние случаи.
- Используйте возможности модуля
typing
.
- Рассмотрите возможность валидации типов во время выполнения.
Подсказка от LabEx
Исследуйте сложные сценарии аннотации типов в средах Python LabEx, чтобы улучшить свои навыки работы с подсказками по типам.
Общие проблемы
- Балансирование между специфичностью и гибкостью типов.
- Управление сложными сценариями типов возвращаемых значений.
- Сохранение читаемости подсказок по типам.
- Интеграция с существующими кодовыми базами.