装饰器函数
装饰器概念
装饰器的形成是为了给旧代码加上新的功能,而又不能改变原有代码和调用方式而形成.
装饰器完全遵循开放封闭原则
装饰器的本质: 一个闭包函数.
装饰器的功能: 不修改源函数及其调用方式的情况下对原函数的功能进行扩展.
开放封闭原则: 对代码的扩展是开放的, 对代码修改是封闭的.
装饰器的代码实现
标准装饰框架
def wapper(func): def inner(*args,**kwargs): '''执行函数之前要做的''' ret = func(*args,**kwargs) '''执行函数之后要做的''' return ret return inner
from functools import wraps def wrap(func): @wraps(func) def inner(*args,**kwargs): '''执行函数之前的操作''' ret = func(*args, **kwargs) '''执行函数之后的操作''' return ret return inner
基础版本装饰器
import time def func(): print('in func') time.sleep(2) def func_time(f): def func_inner(): start_time = time.time() f() end_time = time.time() print(f"函数的执行时间为:{end_time - start_time}") return func_inner func = func_time(func) func()
带参数的装饰器
def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print('''执行函数之前要做的''') re = func(*args,**kwargs) if flag: print('''执行函数之后要做的''') return re return inner return timer @outer(False) def func(): print(111) func()
作者:闫世成
出处:http://cnblogs.com/yanshicheng
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题或建议,请联系上述邮箱,非常感谢。