文章目录
- 1 简介
- 2 使用
1 简介
装饰器(Decorator)是 Python 中一种用于修改函数或类的行为的高级技术。装饰器本质上是一个函数,它接受一个函数作为输入,并返回一个新的函数作为输出。通过使用装饰器,可以在不修改原始函数代码的情况下,添加额外的功能或修改函数的行为。
装饰器的使用方法如下:
定义装饰器函数:创建一个装饰器函数,它接受一个函数作为参数,并返回一个新的函数。
 使用装饰器修饰函数:在要修饰的函数前面加上 @装饰器函数名 的语法糖。
 调用修饰后的函数:通过调用修饰后的函数来执行原始函数,并获得装饰器添加的额外功能或修改的行为。
 需要注意的是,使用装饰器时要注意装饰器的使用顺序,并且注意@deco,“deco(myfunc())” 只是效果一致,但类型不同。如果直接deco(myfunc())调用,方法名带()作为参数,但是在创建装饰器时,参数为方法名,不带()。另外,装饰器中是两层方法调用,这是为了避免死循环。
此外,还可以创建带参数的装饰器,它是在没有参数的装饰器外面再嵌套一个参数的函数,该函数返回那个无参数装饰器即可。类也可以作为装饰器,通过实现类内部的__call__方法,当使用 @ 语法糖把装饰器附加到函数上时,就会调用此方法。
以上是 Python 中装饰器的使用方法,以及一些需要注意的点。通过使用装饰器,可以更加灵活地修改函数或类的行为,提高代码的可维护性和可扩展性。
2 使用
- 一个简单的 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"。