python中如何使用装饰器

# 1.如果装饰器是多层的,谁距离函数最近,则优先使用那个装饰器
# 2.带参数的装饰器必须有三层函数,如verify->decorate->wrapper

# 添加校验功能的装饰器
import time


def verify1(t):
    def decorate(func):
        def wrapper(*args, **kwargs):
            print('第一层校验正在进行中...')
            time.sleep(t)
            print('校验完毕!')
            # 调用原函数
            func(*args, **kwargs)

        return wrapper

    return decorate


def verify2(t, name, age):
    def decorate(func):
        def wrapper(*args, **kwargs):
            print('第二层校验正在进行中...', name, age)
            time.sleep(t)
            print('校验完毕!')
            # 调用原函数
            func(*args, **kwargs)

        return wrapper

    return decorate


# 使用装饰器
@verify1(2)
@verify2(1, '第一个校验器', 20)
def f1(name):
    print('我的名字叫:', name)


f1('lily')


@verify1(1)
@verify2(1, '第一个校验器', 20)
def f2(name, age):
    print('我的名字叫:{},今年{}岁'.format(name, age))


f2('lucy', 20)

打印结果:

第一层校验正在进行中...
校验完毕!
第二层校验正在进行中... 第一个校验器 20
校验完毕!
我的名字叫: lily
第一层校验正在进行中...
校验完毕!
第二层校验正在进行中... 第一个校验器 20
校验完毕!
我的名字叫:lucy,今年20岁
------学习贵在分享,贵在记录,贵在总结。
原文地址:https://www.cnblogs.com/kevin1220/p/14420699.html