Python 装饰器

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

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 装饰器)