函数装饰器的总结

关于装饰器的总结:在不改变函数内部功能代码的情况下对函数功能进行扩展

函数装饰器的应用

  1. 引入日志
  2. 函数执行时间统计
  3. 执行函数前预备处理
  4. 执行函数后清理功能
  5. 权限校验等场景
  6. 缓存

下面写个记录时间的装饰器

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()

猜你喜欢

转载自www.cnblogs.com/Yrind/p/10736402.html
今日推荐