python中装饰器的简单使用

发布时间:2024年01月03日

文章目录

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 作为参数,并返回一个新的函数 wrapperwrapper 函数会先输出 "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"

文章来源:https://blog.csdn.net/weixin_43684214/article/details/135359555
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。