python装饰器 语法与解读

import time #加载time模块
from functools import wraps #加载functools模块中的wraps函数


def cost_time(old_fn):    # 注:cost_time是装饰器名 ,形参old_fn是要装饰的函数   装饰器最外层没有return,也就是不用返回的
   @wraps(old_fn)    #它主要作用就是接收到原函数中的注析,所以括号内也是上面形参一样的
  def inner(*args, **kwargs):  # inner它是cost_time这个装饰器的功能区,也就是要添加的功能在此写,它的形参为 *args, **kwargs  这两个,其实就是为了接收原函数中的参数        
        start_time = time.time()   #innser的代码,记录执行原函数时的时间
        res = old_fn(*args, **kwargs)  # 这个是原函数,结果由变量 res保存,函数名与cost_time形参相同,它的形参与inner的形参相同
        end_time = time.time()    #这个也是inner的代码 ,它记录原函数执行结束时的时间
        print("花费时间为:", end_time - start_time)  #运算并输出原函数执行所花费的时间
        return res  # 返回原函数的结果

    return inner   #返回inner ,这个返回值是固定的,也就是上面inner的函数名,


@cost_time  #注:@后面跟的名字就是装饰器的名字 ,
def kk():    #这个函数就是原函数,是要通过装饰器装饰的函数
    #这行是函数注明
    print('这就是原函数')


kk()   #调用原函数,这样就自动进行装饰了.返回的结果就是这个函数执行所要花费的时间

 

posted @ 2018-08-12 23:40  rO_Ot  阅读(421)  评论(0编辑  收藏  举报