Введение в декораторы
Начнем с простого примера. Откройте новую сессию интерпретатора Python:
python3
У нас есть функция, которая вычисляет квадрат числа:
def square(x):
return x**2
Теперь предположим, что мы хотим добавить функцию в square
, которая логирует входные и выходные данные функции каждый раз, когда она вызывается. Мы можем сделать это с использованием декоратора.
Вот код для декоратора logger
:
def logger(func):
def wrapper(x):
print("Calling function:", func.__name__)
print("Input:", x)
result = func(x)
print("Output:", result)
return result
return wrapper
Теперь мы можем использовать этот декоратор, чтобы улучшить функцию square
:
@logger
def square(x):
return x**2
Когда мы вызываем square(5)
, вывод будет таким:
Calling function: square
Input: 5
Output: 25
Как вы можете видеть, декоратор добавил необходимую функциональность к функции square
, не меняя ее исходный код.