Синтаксис
Декоратор працює, приймаючи функцію як аргумент, а потім виконуючи її у обгортці функції wrapper
.
Для застосування декоратора використовується символ @, за яким слідує ім'я функції-декоратора, розміщене безпосередньо над функцією, яку потрібно модифікувати. Ось приклад:
def decorator(func):
...
# Перший спосіб
@decorator
add(a,b):
print(f "Функція додавання: {a} + {b}")
add(2, 3)
# Другий спосіб
add(a,b):
print(f "Функція додавання: {a} + {b}")
inner = decorator(add)
inner(2, 3)
У цьому прикладі обидва методи дають однаковий результат. Перший спосіб, з використанням символу @
, є більш читабельним і лаконічним способом застосування декораторів
, які часто називають "синтаксичним цукром".
Типовим є використання вкладеної функції з назвою wrapper
всередині декораторів.
Гнучкі декоратори: Пристосування до різноманітних аргументів функцій
Функції часто вимагають різної кількості аргументів.
Для розробки декоратора, який можна застосовувати до функцій з різною кількістю аргументів, ефективно використовувати *args
та **kwargs
у функції wrapper()
.
1234567891011121314151617181920212223242526272829303132333435def indicate(func): def wrapper(*args, **kwargs): print("=" * 15) print("Taken arguments:", *args, kwargs) result = func(*args, **kwargs) print("=" * 15) return result return wrapper @indicate def avg_two(a, b): '''Calculate the average of two numbers''' return round((a + b) / 2, 1) @indicate def avg_three(a, b, c): '''Calculate the average of three numbers''' return round((a + b + c) / 3, 1) @indicate def avg_many_kwargs(**kwargs): '''Calculate the average of multiple numbers in a dictionary''' keys = 0 total = 0 for value in kwargs.values(): keys += 1 total += value return round(total / keys, 1) print("Returned:", avg_two(14, 21), "\n") print("Returned:", avg_three(225, 12, 11), "\n") print("Returned:", avg_many_kwargs(first=51, second=11, third=47, fourth=93))
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.7
Синтаксис
Свайпніть щоб показати меню
Декоратор працює, приймаючи функцію як аргумент, а потім виконуючи її у обгортці функції wrapper
.
Для застосування декоратора використовується символ @, за яким слідує ім'я функції-декоратора, розміщене безпосередньо над функцією, яку потрібно модифікувати. Ось приклад:
def decorator(func):
...
# Перший спосіб
@decorator
add(a,b):
print(f "Функція додавання: {a} + {b}")
add(2, 3)
# Другий спосіб
add(a,b):
print(f "Функція додавання: {a} + {b}")
inner = decorator(add)
inner(2, 3)
У цьому прикладі обидва методи дають однаковий результат. Перший спосіб, з використанням символу @
, є більш читабельним і лаконічним способом застосування декораторів
, які часто називають "синтаксичним цукром".
Типовим є використання вкладеної функції з назвою wrapper
всередині декораторів.
Гнучкі декоратори: Пристосування до різноманітних аргументів функцій
Функції часто вимагають різної кількості аргументів.
Для розробки декоратора, який можна застосовувати до функцій з різною кількістю аргументів, ефективно використовувати *args
та **kwargs
у функції wrapper()
.
1234567891011121314151617181920212223242526272829303132333435def indicate(func): def wrapper(*args, **kwargs): print("=" * 15) print("Taken arguments:", *args, kwargs) result = func(*args, **kwargs) print("=" * 15) return result return wrapper @indicate def avg_two(a, b): '''Calculate the average of two numbers''' return round((a + b) / 2, 1) @indicate def avg_three(a, b, c): '''Calculate the average of three numbers''' return round((a + b + c) / 3, 1) @indicate def avg_many_kwargs(**kwargs): '''Calculate the average of multiple numbers in a dictionary''' keys = 0 total = 0 for value in kwargs.values(): keys += 1 total += value return round(total / keys, 1) print("Returned:", avg_two(14, 21), "\n") print("Returned:", avg_three(225, 12, 11), "\n") print("Returned:", avg_many_kwargs(first=51, second=11, third=47, fourth=93))
Дякуємо за ваш відгук!