zoukankan      html  css  js  c++  java
  • 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岁
    
    ------学习贵在分享,贵在记录,贵在总结。
  • 相关阅读:
    GIT(分布式版本控制系统)
    mysql入门
    百度云上传下载会出现乱码,和丢失数据,.h,.so都会出现,暂未发现丢包现象
    qte搭建
    移植tslib
    网页移植前的问题(包括触摸屏)
    网页移植开发板
    开发板boa移植
    dump工具下,资料的备份与还原
    python-时间模块
  • 原文地址:https://www.cnblogs.com/kevin1220/p/14420699.html
Copyright © 2011-2022 走看看