定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能。
原则:1.不能修改被装饰的函数的源代码;
2.不能修改被装饰函数的调用方式。
理解装饰器需理解一下三点:
1.函数即变量
函数同其他变量一样,在声明的时候都是把内容(字符串的形式)放进内存中,函数名(变量名)作为此内容的“门牌号”。
2.高阶函数
3.嵌套函数
最简单的装饰器案例
#coding=utf-8 import time def decorator(func): def wrapper(): start_time = time.time() func() end_time = time.time() print '执行所花时间:', end_time - start_time return wrapper @decorator # 相当于test = decorator(test) def test(): print '执行...' time.sleep(3) test()
被装饰的函数传参
#coding=utf-8 import time def decorator(func): def wrapper(*args, **kwargs): start_time = time.time() func(*args, **kwargs) end_time = time.time() print '执行所花时间:', end_time - start_time return wrapper @decorator # 相当于test = decorator(test) = wrapper => test() = wrapper() def test(second): print '执行...' time.sleep(second) test(1)
装饰器传参(再最外面再加一层)
#coding=utf-8 import time def decorator(show_time): def out_wrapper(func): def wrapper(*args, **kwargs): start_time = time.time() func(*args, **kwargs) end_time = time.time() print '执行所花时间:', end_time - start_time if show_time: print '当前时间:', time.strftime("%Y-%m-%d %X", time.localtime()) return wrapper return out_wrapper @decorator(True) def test(second): print '执行...' time.sleep(second) test(1)