⚡ Краткий справочник
@decorator — синтаксический сахар для func = decorator(func).
def decorator(func): ... return wrapper — базовая структура.
def factory(param): def decorator(func): ... return wrapper return decorator — параметризованный декоратор.
isinstance(obj, type_) — проверка типа с учётом наследования.
OrderedDict.move_to_end(key) — обновить порядок элемента.
logging.basicConfig(...) — базовая настройка логгера.
Синтаксис декораторов
| Запись | Что означает |
@my_decorator | Применить декоратор без параметров |
@my_decorator(arg) | Сначала вызвать фабрику с аргументом, потом применить возвращённый декоратор |
func = decorator(func) | Эквивалент @decorator |
func = decorator(arg)(func) | Эквивалент @decorator(arg) |
Части декоратора
| Часть | Назначение |
def decorator(func): | Получает декорируемую функцию |
def wrapper(*args, **kwargs): | Универсальная обёртка для любых аргументов |
return func(*args, **kwargs) | Вызов исходной функции |
return wrapper | Возврат обёртки вместо оригинала |
Функции и классы стандартной библиотеки
| Имя | Описание | Пример |
isinstance(obj, type_) | Проверить тип объекта | isinstance(5, int) |
OrderedDict | Словарь с сохранением порядка и методом move_to_end | from collections import OrderedDict |
functools.wraps(func) | Сохраняет метаданные исходной функции | @wraps(func) def wrapper(...) |
functools.lru_cache(maxsize=...) | Готовый декоратор кэширования | @lru_cache(maxsize=128) |
logging.basicConfig(...) | Настройка корневого логгера | logging.basicConfig(filename="app.log") |
Параметры logging.basicConfig
| Параметр | Тип | Описание | По умолчанию |
filename | str | Имя файла для записи логов | None |
level | int | Минимальный уровень сообщений | logging.WARNING |
format | str | Формат строки лога | зависит от настроек |
encoding | str | Кодировка файла | None |
Срезы строк
| Запись | Значение |
s[:n] | Первые n символов |
s[n:] | Все символы начиная с индекса n |
s[start:stop] | Подстрока от start до stop (не включая) |
s[:-3] | Все символы, кроме последних трёх |
Правила использования
- Обёртка должна принимать
*args и **kwargs, если декорируемые функции имеют разные сигнатуры.
- Для сохранения имени и документации функции применяйте
@functools.wraps.
- Не вызывайте
logging.basicConfig несколько раз — последующие вызовы игнорируются, если корневой логгер уже настроен.
- Проверяйте типы через
isinstance, а не через сравнение type(), чтобы не ломать наследование.
- Кэш на
OrderedDict позволяет реализовать LRU-политику; в Python 3.7+ обычный dict тоже сохраняет порядок, но не имеет move_to_end.