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岁
    
    ------学习贵在分享,贵在记录,贵在总结。
  • 相关阅读:
    几种常见的软件架构
    路由事件
    PathAnimation
    String、Brush、Color 相互转换
    Sql 使用备份还是使用脚本
    WPF 路由事件
    WPF之复杂形状控件
    WPF之鼠标滑动切换图片
    WPF之基于路径的动画
    WPF之自定义控件
  • 原文地址:https://www.cnblogs.com/kevin1220/p/14420699.html
Copyright © 2011-2022 走看看