def decorator(func):
def wrapper():
print("Before function call")
func()
print("After function call")
return wrapper
@decorator
def hello():
print("Hello!")
hello()
Этот код демонстрирует работу декоратора в Python.
Декоратор decorator принимает функцию func в качестве аргумента и возвращает новую функцию wrapper.
wrapper выполняет следующий код:
func (в данном случае hello)Синтаксис @decorator перед определением функции hello является синтаксическим сахаром, эквивалентным hello = decorator(hello). Он применяет декоратор к функции hello.
При вызове hello() будет выполнен код функции wrapper, который сначала выведет "Before function call", затем "Hello!", и, наконец, "After function call".
Данный код демонстрирует использование декоратора в Python. Давайте разберем, что происходит:
decorator:
Функция decorator принимает другую функцию (func) в качестве аргумента и возвращает новую функцию (wrapper). Это основа декоратора.
wrapper:
Функция wrapper содержит логику, которая будет выполняться до и после вызова декорируемой функции. В данном случае, она выводит "Before function call", затем вызывает исходную функцию func(), и после этого выводит "After function call".
hello:
@decorator над определением функции hello эквивалентно записи hello = decorator(hello). Это означает, что функция hello "заменяется" на функцию wrapper, возвращенную декоратором.
hello():
Когда вызывается hello(), на самом деле вызывается wrapper(). wrapper() выполняет свою логику (выводит сообщения "Before..." и "After...") и вызывает исходную функцию hello(), которая выводит "Hello!".
При выполнении кода будет выведено следующее:
Before function call
Hello!
After function call
wrapper имеет доступ к переменным из внешней области видимости (в данном случае, к func), даже после того, как внешняя функция decorator завершила свое выполнение. Это пример замыкания.