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

bookСинтаксис

Декоратор працює, приймаючи функцію як аргумент, а потім виконуючи її у обгортці функції 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().

1234567891011121314151617181920212223242526272829303132333435
def 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))
copy
Все було зрозуміло?

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

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

Секція 5. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 3.7

bookСинтаксис

Свайпніть щоб показати меню

Декоратор працює, приймаючи функцію як аргумент, а потім виконуючи її у обгортці функції 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().

1234567891011121314151617181920212223242526272829303132333435
def 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))
copy
Все було зрозуміло?

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

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

Секція 5. Розділ 2
some-alt