欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

装饰器

程序员文章站 2022-06-30 14:13:41
...

本节在这里和大家展示一下装饰器的使用,以及原理

装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多初次接触这个知识的人来讲,这个功能有点绕,自学时直接绕过去了,然后面试问到了就挂了,因为装饰器是程序开发的基础知识,这个都不会,别跟人家说你会Python

当你在公司里调试代码的时候,发现以下代码的运行时间过长,于是你意识到可能有需要优化的地方:

def func1():
    pass

def func2():
    pass

def func3():
    pass

def func4():
    pass
但是写代码要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即:
封闭:已实现的功能代码块

开放:对扩展开发

所以,你不能直接在每个函数内部进行调试,以免破坏代码的稳定性。但是,在每个调用函数的前后执行的计时操作的话,如果函数量足够大的话,会造成代码量的冗余,且浪费时间。那么,这个时候该如何进行代码的检查呢?这里就可以用到装饰器了:

import time

def check_time(func):
    
    def inner_func():
        start_time = time.time()
        res = func()                    # 调用原函数,并获得原函数的返回值
        end_time = time.time()
        time_consuming = end_time - start_time          # 计算耗时时间
        print("函数 < %s > 总共耗时 %s"%(func.__name__,time_consuming))
        return res        返回原函数的返回值

    return inner_func       # 返回内部函数的引用

@check_time
def func1():
    pass

@check_time
def func2():
    pass

@check_time
def func3():
    pass

@check_time
def func4():
    pass

这样,就能在不该变原函数的代码结构的情况下,就能对每个函数的执行耗时情况一目了然了。

那么,装饰器既然可以这样使用,那么他的使用原理是什么呢?

装饰器

装饰器的几大功能:

  1. 引入日志
  2. 函数执行时间统计
  3. 执行函数前预备处理
  4. 执行函数后清理功能
  5. 权限校验等场景
  6. 缓存

在工作中,装饰器的使用时必须的,一个合格的员工都应该了解和掌握装饰器。其实,装饰器不仅仅局限于用函数进行装饰,还有类当装饰器,下面是我用类装饰器写的一段代码,大家可以参考一下:

class A(object):
    """ 将A充当类装饰器 """
    def __init__(self,func):
        self.func = func

    def __call__(self, *args, **kwargs):
        print("类装饰器开始执行啦--------")
        self.func()
        print("类装饰器执行结束啦--------")


@A
def test():
    print("this is test!")

test()
装饰器其实还有很多用法和复杂的装饰器,比如装饰器传参啊,还有几个装饰器共同装饰同一个函数等等。只不过因为时间和篇幅有限,今天就先到这里了,感谢大家的阅读!
相关标签: 装饰器

上一篇: 装饰器

下一篇: 装饰器