装饰器(Decorator
)是 Python
中一种用于修改函数或类的行为的高级技术。装饰器本质上是一个函数,它接受一个函数作为输入,并返回一个新的函数作为输出。通过使用装饰器,可以在不修改原始函数代码的情况下,添加额外的功能或修改函数的行为。
装饰器的使用方法如下:
定义装饰器函数:创建一个装饰器函数,它接受一个函数作为参数,并返回一个新的函数。
使用装饰器修饰函数:在要修饰的函数前面加上 @
装饰器函数名 的语法糖。
调用修饰后的函数:通过调用修饰后的函数来执行原始函数,并获得装饰器添加的额外功能或修改的行为。
需要注意的是,使用装饰器时要注意装饰器的使用顺序,并且注意@deco
,“deco(myfunc())”
只是效果一致,但类型不同。如果直接deco(myfunc())
调用,方法名带()
作为参数,但是在创建装饰器时,参数为方法名,不带()
。另外,装饰器中是两层方法调用,这是为了避免死循环。
此外,还可以创建带参数的装饰器,它是在没有参数的装饰器外面再嵌套一个参数的函数,该函数返回那个无参数装饰器即可。类也可以作为装饰器,通过实现类内部的__call__
方法,当使用 @
语法糖把装饰器附加到函数上时,就会调用此方法。
以上是 Python
中装饰器的使用方法,以及一些需要注意的点。通过使用装饰器,可以更加灵活地修改函数或类的行为,提高代码的可维护性和可扩展性。
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Before function call")
result = func(*args, **kwargs)
print("After function call")
return result
return wrapper
@my_decorator
def add(x, y):
return x + y
result = add(3, 5)
print(result)
Before function call
8
After function call
在上面的代码中,我们定义了一个名为 my_decorator
的装饰器函数。该装饰器接受一个函数 func
作为参数,并返回一个新的函数 wrapper
。wrapper
函数会先输出 "Before function call"
,然后调用原始函数 func
,并将结果保存在 result
变量中。最后,输出 "After function call"
,并返回 result
。
接下来,我们使用 @my_decorator
语法糖将 add
函数修饰为带装饰器的函数。现在,当我们调用 add(3, 5)
时,实际上是调用了 wrapper(3, 5)
。在 wrapper
函数中,我们先输出了 "Before function call"
,然后调用原始函数 add(3, 5)
,得到结果 8
,并将其保存在 result
变量中。最后,输出 "After function call"
,并返回 result
。最终,我们得到了结果 8
,并输出了 "Before function call"
和 "After function call"
。