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Знайомство з Декораторами

Поговоримо про декоратори. Зауважте, що "декоратори" можуть бути складною темою для початківців. Ми розглянемо декоратори детально, крок за кроком, пояснюючи, як вони працюють. Спочатку це може бути складно зрозуміти. Чи готові ви до цих викликів? Тоді вам сюди!

Декоратори - це функції, які додають додаткову функціональність до іншої функції, використовуючи ** замикання**. Ось приклад роботи декоратора:

123456789101112131415161718192021
def decorator(func): def wrapper(argument1, argument2): print("Function starts executing") result = func(argument1, argument2) print("Function ends executing") return result return wrapper def add(a, b): print(f"Function add: {a} + {b}") return a + b add = decorator(add) print(add(14, 12)) print(add(11, 28)) print(add(33, 16))
copy

У цьому прикладі функція decorator() приймає іншу функцію як аргумент, визначає функцію wrapper(), вкладає задану функцію в wrapper() і повертає wrapper(). Робота декоратора складається з трьох кроків:

  1. Отримання функції в якості аргументу.
  2. Включення цієї функції у новостворену функцію (обгортку).
  3. Повернення функції-обгортки, яка тепер містить вихідну функцію.

Функція wrapper() містить основну логіку роботи декоратора і викликає функцію з заданими параметрами. Функція add() перепризначається функцією wrapper(), що повертається функцією decorator(), яка тепер містить вкладену функцію add().

  1. Спочатку інтерпретатор Python читає і визначає функцію декоратора. На цьому етапі він не виконує жодного коду всередині декоратора; він просто робить примітку, що існує функція з назвою decorator.
  2. Далі він визначає функцію add. Як і decorator, ця функція також ще не виконується, а лише визначається.
  3. Після визначення add виконується наступний рядок add = decorator(add). Тут вперше викликається функція decorator. Вона отримує функцію add як аргумент. Всередині decorator вона визначає обгортку і потім повертає її. Отже, тепер add більше не посилається на оригінальну функцію add, а на функцію wrapper, повернуту decorator.
  4. Коли виконується add(14, 12), вона викликає функцію-обгортку з 14 та 12.
  • обгортка виводить "Функція починає виконуватись"
  • викликає оригінальну функцію add з 14 і 12, яка виводить "Function add: 14 + 12" і повертає 26.
  • Виводить "Функція завершує виконання".
  • wrapper повертає 26, яке виводиться за допомогою print(add(14, 12)).

Наступні виклики повторюють попередні кроки.

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

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

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

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