装饰器

本质就是函数,为其他函数添加附加功能。
原则:

  1. 不修改被修饰函数的源代码;
  2. 不修改被修饰函数的调用方式;

解压序列

a,b,c = (1,2,3)
#a=1
#b=2
#c=3

装饰器实例

装饰器=高阶函数+函数嵌套+闭包

import time
def timmer(func):
    def wrapper(*args,**kwargs):  #cal('tiger',age=18)  --> args=('tiger') kwargs=['age':18]
        start_time= time.time()
        f = func(*args,**kwargs)   #cal(*('tiger'),**['age':18])
        stop_time = time.time()
        print("函数运行时间为:%s" %(stop_time-start_time))
        return f
    return wrapper


@timmer
def cal(name,age):
    print(name,age)
    return res
a = range(10)
res = cal(a)
print(res)

高阶函数不能实现装饰器

import time
def foo():
    time.sleep(3)
    print("this is foo")


def test(func):
   start_time = time.time()
   func()
   end_time = time.time()
   print(end_time-start_time)
   return func

foo = test(foo)
foo()
posted on 2018-10-15 12:52  cherrydot  阅读(77)  评论(0编辑  收藏  举报