函数装饰器的总结
Posted yrind
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数装饰器的总结相关的知识,希望对你有一定的参考价值。
关于装饰器的总结:在不改变函数内部功能代码的情况下对函数功能进行扩展
函数装饰器的应用
- 引入日志
- 函数执行时间统计
- 执行函数前预备处理
- 执行函数后清理功能
- 权限校验等场景
- 缓存
下面写个记录时间的装饰器
import time def TimeRecord(fun): def wrag(*args,**kwargs): record1 = time.time() c = fun(*args,**kwargs) record2 = time.time() print(record2-record1) return c return wrag @TimeRecord def task(): time.sleep(2) task() # 2.0004897117614746
再来个带参数的装饰器
from time import ctime, sleep def timefun_arg(pre="hello"): def timefun(func): def wrapped_func(*args,**kwargs): print("%s called at %s %s" % (func.__name__, ctime(), pre)) return func(*args,**kwargs) return wrapped_func return timefun # 下面的装饰过程 # 1. 调用timefun_arg("itcast") # 2. 将步骤1得到的返回值,即time_fun返回, 然后time_fun(foo) # 3. 将time_fun(foo)的结果返回,即wrapped_func # 4. 让foo = wrapped_fun,即foo现在指向wrapped_func @timefun_arg("itcast") def foo(): print("I am foo") @timefun_arg("python") def too(): print("I am too") foo() sleep(2) foo() too() sleep(2) too()
以上是关于函数装饰器的总结的主要内容,如果未能解决你的问题,请参考以下文章