Python 装饰器

作者: ThanatosXX | 来源:发表于2018-11-29 09:12 被阅读53次

    当有多个函数需要拥有相同功能时,装饰器就起到很大作用,在不改变原有函数代码时,用装饰器给函数增加一个小功能很是方便。
    譬如我现在有几个函数,我想知道它们的执行时间,那么我可以写一个装饰器来实现。

    def count_time(func):
        def int_time(*args,**kwargs):
            start_time = datetime.datetime.now() #程序开始时间
            func(*args,**kwargs)
            over_time = datetime.datetime.now()  #程序结束时间
            total_time = (over_time-start_time).total_seconds()
            print('%s executed in %s seconds' %(func.__name__,total_time))
        return int_time
    

    这里使用args和kwargs允许我们在函数中传递多个参数
    我希望计算几个数的加减乘除,定义不同的函数

    def func1(x,y):
        time.sleep(2.5)
        return x + y
    
    def func2(x,y,z):
        time.sleep(2.5)
        return x*y*z
    

    用@符号调用装饰器
    下面给出完整代码

    import datetime,functools,time
    
    def count_time(func):
        def int_time(*args,**kwargs):
            start_time = datetime.datetime.now() #程序开始时间
            func(*args,**kwargs)
            over_time = datetime.datetime.now()  #程序结束时间
            total_time = (over_time-start_time).total_seconds()
            print('%s executed in %s seconds' %(func.__name__,total_time))
        return int_time
    
    @count_time
    def func1(x,y):
        time.sleep(2.5)
        return x + y
    
    @count_time
    def func2(x,y,z):
        time.sleep(2.5)
        return x*y*z
    
    func1(2,5)
    func2(4,6,3)
    

    运行结果


    使用这个装饰器相当于
    func=count_time(func),int_time作为返回值赋值给func

    相关文章

      网友评论

        本文标题:Python 装饰器

        本文链接:https://www.haomeiwen.com/subject/soqxcqtx.html