Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Декоратори з Параметрами | Декоратори
Середній Рівень Python: Аргументи, Генератори та Декоратори
course content

Зміст курсу

Середній Рівень Python: Аргументи, Генератори та Декоратори

Середній Рівень Python: Аргументи, Генератори та Декоратори

1. Пакування та Розпакування
2. Аргументи Функції
3. Функція як Аргумент
4. Область видимості змінних
5. Декоратори

book
Декоратори з Параметрами

Декоратори з параметрами у Python - це просунута функція, яка дозволяє передавати додаткові аргументи до ваших декораторів, підвищуючи їхню гнучкість. Ось практичний приклад, який ілюструє цю концепцію:

Базова структура декоратора

Почнемо з базової структури декоратора:

123456789101112
def simple_decorator(func): def wrapper(): print("Something is happening before the function is called.") func() print("Something is happening after the function is called.") return wrapper @simple_decorator def say_hello(): print("Hello!") say_hello()
copy

У цьому прикладі simple_decorator - це регулярний декоратор, який змінює поведінку функції say_hello.

Декоратор з параметрами

Тепер давайте створимо декоратор, який приймає параметри:

12345678910111213
def decorator_with_args(arg1, arg2): def decorator(func): def wrapper(*args, **kwargs): print(f"Decorator args: {arg1}, {arg2}") return func(*args, **kwargs) return wrapper return decorator @decorator_with_args("hello", 42) def print_numbers(a, b): print(a + b) print_numbers(10, 5)
copy

У цьому прикладі decorator_with_args - це фабрика декораторів, яка приймає параметри (arg1, arg2) і повертає власне декоратор (decorator). Функція обгортка wrapper - це функція, яка модифікує поведінку обгорнутої функції (print_numbers).

Пояснення

  • Викликається decorator_with_args з аргументами ("hello", 42);
  • Повертає функцію decorator;
  • decorator отримує функцію print_numbers і повертає функцію wrapper;
  • Функція wrapper має доступ як до аргументів функції decorator_with_args, так і до аргументів функції print_numbers.

Така структура забезпечує більшу гнучкість і можливість повторного використання декораторів, оскільки ви можете передавати власні аргументи для зміни їхньої поведінки.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 5. Розділ 4
We're sorry to hear that something went wrong. What happened?
some-alt