Мне нужно знать, когда вызывается функция и что-то делать после вызова функции. Кажется, Interceptor может это сделать.
Как я могу использовать Interceptor в python?
Это можно сделать с помощью декораторов:
from functools import wraps
def iterceptor(func):
print('this is executed at function definition time (def my_func)')
@wraps(func)
def wrapper(*args, **kwargs):
print('this is executed before function call')
result = func(*args, **kwargs)
print('this is executed after function call')
return result
return wrapper
@iterceptor
def my_func(n):
print('this is my_func')
print('n =', n)
my_func(4)
Выход:
this is executed at function definition time (def my_func)
this is executed before function call
this is my_func
n = 4
this is executed after function call
@iterceptor
заменяет my_func результатом выполнения функции iterceptor
, то есть с функцией- wrapper
. wrapper
обертывает данную функцию в некоторый код, обычно сохраняя аргументы и результат выполнения wrappee, но добавляет некоторое дополнительное поведение.
@wraps(func)
есть, чтобы скопировать данные подписи /docstring функции func
на вновь созданную функцию wrapper
.
Больше информации:
@
syntax делает именно это, только для локальных функций:my_lib.my_func = interceptor(my_lib.my_func)