Практическое указание типов
Объединение lambda-функций с подсказками типов
Базовое указание типов для lambda-функций
from typing import Callable
## Lambda-функция с указанием типа
multiply: Callable[[int, int], int] = lambda x, y: x * y
result = multiply(5, 3)
print(result) ## Output: 15
Стратегии указания типов для lambda-функций
Простые аннотации типов
## Lambda с явными подсказками типов
process_number: Callable[[float], float] = lambda x: x * 2.5
print(process_number(4.0)) ## Output: 10.0
Сложные подсказки типов для lambda-функций
from typing import List, Callable
## Lambda для обработки списка
filter_even: Callable[[List[int]], List[int]] = lambda nums: list(filter(lambda x: x % 2 == 0, nums))
numbers = [1, 2, 3, 4, 5, 6]
print(filter_even(numbers)) ## Output: [2, 4, 6]
Рабочий процесс указания типов
graph TD
A[Lambda-функция] --> B{Аннотация типа}
B --> C[Статическая проверка типов]
C --> D{Тип правильный?}
D -->|Да| E[Выполнение кода]
D -->|Нет| F[Ошибка типа]
Расширенные методы указания типов
Типы с опциональностью и объединяемые типы
from typing import Optional, Union
## Lambda с типами с опциональностью и объединяемые типы
safe_divide: Callable[[float, float], Optional[float]] = lambda x, y: x / y if y!= 0 else None
## Lambda с объединяемым типом
process_value: Callable[[Union[int, str]], str] = lambda x: str(x).upper()
Общие шаблоны и ловушки
| Шаблон |
Описание |
Лучшая практика |
| Простая трансформация |
Однострочное преобразование типа |
Использовать явные подсказки типов |
| Сложная логика |
Несколько операций |
Рассмотреть именованные функции |
| Обработка ошибок |
Условная обработка |
Добавить безопасные проверки типов |
Особенности производительности
from typing import Callable
import timeit
## Сравнение производительности typed и untyped lambda
typed_lambda: Callable[[int], int] = lambda x: x * 2
untyped_lambda = lambda x: x * 2
## Сравнение времени выполнения
typed_time = timeit.timeit(lambda: typed_lambda(10), number=100000)
untyped_time = timeit.timeit(lambda: untyped_lambda(10), number=100000)
Лучшие практики для указания типов в lambda-функциях
- Использовать
Callable для подсказок типов функций
- Указывать типы входных и выходных данных
- Keep lambda functions simple
- Use type checkers like mypy
Пример из реального мира
from typing import List, Callable
def apply_transformation(
data: List[int],
transformer: Callable[[int], int]
) -> List[int]:
return list(map(transformer, data))
## Использование lambda с указанием типа
squared: Callable[[int], int] = lambda x: x ** 2
numbers = [1, 2, 3, 4, 5]
result = apply_transformation(numbers, squared)
print(result) ## Output: [1, 4, 9, 16, 25]
В LabEx мы подчеркиваем важность четкого кода с указанием типов для лучшей поддержки и читаемости.