🔖 Справочник команд и синтаксиса

⚡ Краткий справочник

  • @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_endfrom 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

ПараметрТипОписаниеПо умолчанию
filenamestrИмя файла для записи логовNone
levelintМинимальный уровень сообщенийlogging.WARNING
formatstrФормат строки логазависит от настроек
encodingstrКодировка файла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.
Проверить по документации: подробнее о декораторах — Python glossary: decorator, о functools.lru_cacheдокументация functools.