Декоратори з Параметрами
Декоратори з параметрами у Python - це просунута функція, яка дозволяє передавати додаткові аргументи до ваших декораторів, підвищуючи їхню гнучкість. Ось практичний приклад, який ілюструє цю концепцію:
Базова структура декоратора
Почнемо з базової структури декоратора:
123456789101112def 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()
У цьому прикладі simple_decorator - це регулярний декоратор, який змінює поведінку функції say_hello.
Декоратор з параметрами
Тепер давайте створимо декоратор, який приймає параметри:
12345678910111213def 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)
У цьому прикладі 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
.
Така структура забезпечує більшу гнучкість і можливість повторного використання декораторів, оскільки ви можете передавати власні аргументи для зміни їхньої поведінки.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.7
Декоратори з Параметрами
Свайпніть щоб показати меню
Декоратори з параметрами у Python - це просунута функція, яка дозволяє передавати додаткові аргументи до ваших декораторів, підвищуючи їхню гнучкість. Ось практичний приклад, який ілюструє цю концепцію:
Базова структура декоратора
Почнемо з базової структури декоратора:
123456789101112def 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()
У цьому прикладі simple_decorator - це регулярний декоратор, який змінює поведінку функції say_hello.
Декоратор з параметрами
Тепер давайте створимо декоратор, який приймає параметри:
12345678910111213def 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)
У цьому прикладі 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
.
Така структура забезпечує більшу гнучкість і можливість повторного використання декораторів, оскільки ви можете передавати власні аргументи для зміни їхньої поведінки.
Дякуємо за ваш відгук!