装饰器函数
Posted pythonmrchu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器函数相关的知识,希望对你有一定的参考价值。
1.装饰器 ? 装饰器:在不改变原函数的调用方式和函数,额外的增加功能 简单装饰器 def timer(func): def inner(): print(time.time()) func() # 原来的函数 return inner ? @timer # func1 = timer(func1) def func1(): print(‘func1‘) 函数带返回值 def timer(func): def inner(): print(time.time()) ret = func() # 原来的函数 return ret return inner 原函数携带参数 def download(func): def inner(*args, **kwargs): print(‘下载软件‘) func(*args, **kwargs) return inner 完整的装饰器的写法 def wrapper(func): def inner(*args, **kwargs): # 执行被装饰函数之前进行的操作 ret = func(*args, **kwargs) # 执行被装饰函数之后进行的操作 return ret return inner 装饰器带参数 def outer(flag): def timer(func): def inner(*args, **kwargs): if flag: print(time.time()) ret = func(*args, **kwargs) # 原来的函数 else: ret = func(*args, **kwargs) # 原来的函数 return ret return inner return timer ? @outer(True) # func1 = timer(func1) inner def func1(): print(‘func1‘) 多个装饰器装饰同一个函数 def wrapper1(func): def inner(*args, **kwargs): print(‘wrapper1 前‘) # 2 ret = func(*args, **kwargs) print(‘wrapper1 后‘) # 4 return ret return inner ? def wrapper2(func): def inner(*args, **kwargs): print(‘wrapper2 前‘) # 1 ret = func(*args, **kwargs) print(‘wrapper2 后‘) # 5 return ret return inner ? @wrapper2 # func1 = wrapper2(func1) wrapper2.inner func=wrapper1.inner @wrapper1 # func1 = wrapper1(func1) wrapper1.inner func=func1 def func1(): print(‘func1‘) # 3 return ‘func1的返回值‘ ? print(func1()) # 6
装饰器修复技术 from functools import wraps def timer(func): @wraps(func) def inner(): print(time.time()) ret = func() # 原来的函数 return ret return inner
以上是关于装饰器函数的主要内容,如果未能解决你的问题,请参考以下文章