装饰器怎样实现
装饰器可以在函数或类定义前加上@装饰器名
,来实现对原函数或类的功能进行扩展或修改。下面是一个简单的装饰器实现的示例:
def my_decorator(func):
def wrapper(*args, **kwargs):
# 在原函数执行前的操作
print("Before function execution")
# 调用原函数
result = func(*args, **kwargs)
# 在原函数执行后的操作
print("After function execution")
return result
return wrapper
@my_decorator
def my_function():
print("Inside the function")
my_function()
输出结果为:
Before function execution
Inside the function
After function execution
在上述示例中,my_decorator
函数是一个装饰器,它接收一个函数作为参数,然后定义一个内部函数wrapper
来包装原函数。wrapper
函数在调用原函数前后可以执行额外的操作,比如打印日志。最后,my_decorator
函数返回内部函数wrapper
。
在定义my_function
函数前,使用@my_decorator
装饰器将my_decorator
应用到my_function
函数上。这样,当调用my_function
函数时,实际上会先调用my_decorator
装饰器返回的wrapper
函数。wrapper
函数会在调用原函数前后执行额外的操作,然后再调用原函数,并返回原函数的结果。