Используешь ли декораторы в работе
Python
Middle
Без компании
Используешь ли декораторы в работе
Ответы
Да, декораторы — мощный инструмент Python для модификации поведения функций/методов без изменения их кода. Часто применяю их для:
- **Логирования**
```
def log_time(func):
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f"{func.__name__} took {time.time() - start:.2f}s")
return result
return wrapper
@log_time
def heavy_calculation():
time.sleep(1)
```
- **Авторизации/валидации**
```
def check_auth(func):
def wrapper(request, *args, **kwargs):
if not request.user.is_authenticated:
raise PermissionError
return func(request, *args, **kwargs)
return wrapper
```
- **Кэширования** (например, `@functools.lru_cache`)
- **Ретриев** (библиотеки типа `@retry`)
**Важно**:
- Декораторы могут усложнить отладку (используйте `functools.wraps` для сохранения метаданных).
- Вложенные декораторы выполняются сверху вниз (`@A @B def foo` → `A(B(foo))`).