Я даю legacy-функцию на Python без аннотаций, ты возвращаешь её с type hints + объясняешь сложные случаи.
Код:
[КОД_ФУНКЦИИ]
Требования:
- стандартная typing (Optional, Union, List, Dict, Callable)
- если есть полиморфизм — Protocol или TypeVar
- nullable параметры через Optional
- generic-возвраты, если функция работает с любым типом
- докомментируй сложные случаи одной строкой
Верни код + список изменений с объяснением.
Собрать под себя — поля заполнены рабочими значениями, меняйте их и промпт выше обновится сам
```python
from typing import Optional, Callable, TypeVar
T = TypeVar("T")
def retry(
fn: Callable[[], T],
max_attempts: int = 3,
on_fail: Optional[Callable[[Exception], None]] = None
) -> T:
...
```
Изменения:
- TypeVar T: функция вернёт тот же тип что fn
- Callable[[], T] — fn без аргументов, возвращает T
- Optional[Callable] — on_fail может быть None
- возврат T (не Any) — сохранение типа