Найти в Дзене

Декораторы в Python: магия функций внутри функций

Привет! Сегодня поговорим о декораторах — мощном инструменте Python, который позволяет изменять поведение функций без изменения их кода.
Если ты видел @staticmethod, @classmethod или @app.route() во Flask, то это как раз декораторы! 1. Что такое декораторы?
Декоратор — это функция, которая оборачивает другую функцию, добавляя ей новую логику. Простой пример 2. Декораторы с аргументами
Допустим, мы хотим логировать аргументы и результат функции.
Декоратор теперь перехватывает аргументы и результат.
3. Декораторы с параметрами
Что если мы хотим передавать настройки в декоратор? Теперь мы можем управлять поведением через параметры! 4. Декораторы для контроля доступа
Допустим, у нас есть функция, доступная только админу. Теперь нельзя вызвать функцию без прав. 5. Классы-декораторы
Декоратор можно реализовать через класс. Класс Timer запоминает функцию и вызывает её через __call__(). 6. Практическое применение | Задача | Декоратор |
|--------|------------|
| Ло

Привет! Сегодня поговорим о декораторах — мощном инструменте Python, который позволяет изменять поведение функций без изменения их кода.
Если ты видел @staticmethod, @classmethod или @app.route() во Flask, то это как раз декораторы!

1. Что такое декораторы?
Декоратор — это функция, которая оборачивает другую функцию, добавляя ей новую логику.

Простой пример

-2

Вывод:
Вывод:

2. Декораторы с аргументами
Допустим, мы хотим логировать
аргументы и результат функции.

-4

Вывод:
Вывод:

Декоратор теперь перехватывает аргументы и результат.



3. Декораторы с параметрами

Что если мы хотим передавать
настройки в декоратор?

-6
Вывод:
Вывод:

Теперь мы можем управлять поведением через параметры!

4. Декораторы для контроля доступа
Допустим, у нас есть функция, доступная только
админу.

-8

Теперь нельзя вызвать функцию без прав.

5. Классы-декораторы
Декоратор можно реализовать через класс.

-9

Вывод:
Вывод:

Класс Timer запоминает функцию и вызывает её через __call__().

6. Практическое применение

| Задача | Декоратор |
|--------|------------|
| Логирование вызовов | @log_function |
| Кэширование данных | @functools.lru_cache |
| Повторный запуск | @retry |
| Контроль доступа | @require_admin |
| Измерение времени | @Timer |

Заключение

- Декораторы позволяют изменять поведение функций.
-
Можно использовать декораторы с аргументами и декораторы-классы.
-
Они помогают писать чистый и гибкий код.

Какой декоратор ты будешь использовать в своем проекте? Напиши в комментариях!