Зміст курсу
Середній Рівень Python: Аргументи, Генератори та Декоратори
Середній Рівень Python: Аргументи, Генератори та Декоратори
Знайомство з Декораторами
Поговоримо про декоратори. Зауважте, що "декоратори" можуть бути складною темою для початківців. Ми розглянемо декоратори детально, крок за кроком, пояснюючи, як вони працюють. Спочатку це може бути складно зрозуміти. Чи готові ви до цих викликів? Тоді вам сюди!
Декоратори - це функції, які додають додаткову функціональність до іншої функції, використовуючи ** замикання**. Ось приклад роботи декоратора:
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))
У цьому прикладі функція decorator()
приймає іншу функцію як аргумент, визначає функцію wrapper()
, вкладає задану функцію в wrapper()
і повертає wrapper()
. Робота декоратора складається з трьох кроків:
- Отримання функції в якості аргументу.
- Включення цієї функції у новостворену функцію (обгортку).
- Повернення функції-обгортки, яка тепер містить вихідну функцію.
Функція wrapper()
містить основну логіку роботи декоратора і викликає функцію з заданими параметрами. Функція add()
перепризначається функцією wrapper()
, що повертається функцією decorator()
, яка тепер містить вкладену функцію add()
.
- Спочатку інтерпретатор Python читає і визначає функцію декоратора. На цьому етапі він не виконує жодного коду всередині декоратора; він просто робить примітку, що існує функція з назвою decorator.
- Далі він визначає функцію add. Як і decorator, ця функція також ще не виконується, а лише визначається.
- Після визначення add виконується наступний рядок
add = decorator(add)
. Тут вперше викликається функція decorator. Вона отримує функцію add як аргумент. Всерединіdecorator
вона визначаєобгортку
і потім повертає її. Отже, теперadd
більше не посилається на оригінальну функціюadd
, а на функціюwrapper
, повернутуdecorator
. - Коли виконується
add(14, 12)
, вона викликає функцію-обгортку з 14 та 12.
- обгортка виводить "Функція починає виконуватись"
- викликає оригінальну функцію add з 14 і 12, яка виводить "Function add: 14 + 12" і повертає 26.
- Виводить "Функція завершує виконання".
wrapper
повертає 26, яке виводиться за допомогою print(add(14, 12)).
Наступні виклики повторюють попередні кроки.
Дякуємо за ваш відгук!