Python Community
12.9K subscribers
1.26K photos
37 videos
15 files
741 links
Python Community RU - СНГ сообщество Python-разработчиков

Чат канала: @python_community_chat

Сотрудничество: @cyberJohnny и @Sergey_bzd

РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed&registryType=bloggersPermission
Download Telegram
⚡️ Упрощаем создание декораторов

Помните, мы уже говорили про создание декораторов и классов-декораторов. В этот раз мы поговорим о декораторе, который используется для создания этих самых декораторов.

Для этого мы воспользуемся декоратором @wraps из модуля functools — это упрощение для функции functools.update_wrapper.

Её задача — выдавать себя за настоящую функцию, которая использует декоратор. То есть, она подменивает значения name и doc на значения реальной функции.

Если мы попытаемся получить имя или документацию функции, использующую декоратор, то мы получим все значения wrapper. Это может сбить некоторые редакторы и программистов с толку, поэтому многие используют @wraps, как на примере выше.

#миниурок #functools #декоратор
⚡️ Кэшируем результат работы метода

Кэширование — действительно полезная вещь, если у вас есть тяжёлые математические операции. Оно уменьшает использование процессора, но потребляет ОЗУ.

Декораторы cache и cached_property как раз созданы для этой задачи. Они создают словарь по типу «Входные данные : результат» и сохраняют туда результат работы функции.

cached_property — это то же самое, что и @cache @property. И, поскольку это свойство, используется только в классах.

Если вы пользуетесь версией старее python 3.9, то воспользуйтесь декоратором lru_cache.

Если вам стало интересно, посетите документацию.

#миниурок #cache