装饰器函数
装饰器概念
装饰器的形成是为了给旧代码加上新的功能,而又不能改变原有代码和调用方式而形成.
装饰器完全遵循开放封闭原则
装饰器的本质: 一个闭包函数.
装饰器的功能: 不修改源函数及其调用方式的情况下对原函数的功能进行扩展.
开放封闭原则: 对代码的扩展是开放的, 对代码修改是封闭的.
装饰器的代码实现
标准装饰框架
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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题或建议,请联系上述邮箱,非常感谢。

浙公网安备 33010602011771号