• Python学习


    1、@waps

      保证被装饰函数所有的属性保持不变

    from functools import wraps
    def wrapper(func):
        @wraps(func)
        def inner(*args,**kwargs):
            print('在被装饰的函数执行之前做的事')
            ret = func(*args,**kwargs)
            print('在被装饰的函数执行之后做的事')
            return ret
        return inner
    
    @wrapper
    def holiday(day):
        '''This is a holiday notice'''
        print('元旦放假剩余%d天'%day)
        return('好开心噻!')
    
    ret = holiday(3)
    print(ret)
    
    print(holiday.__name__)
    print(holiday.__doc__)

    2、带参数的装饰器

      常用于批量处理装饰器函数的应用与否

    import time
    flage = True
    
    def wrapper_out(flag):
        def wrapper(func):
            def inner(*args,**kwargs):
                if flag:
                    start = time.time()
                    ret = func(*args,**kwargs)
                    end = time.time()
                    print(end - start)
                    return ret
                else:
                    ret = func(*args, **kwargs)
                    return ret
            return inner
        return wrapper
    
    @wrapper_out(flage)
    def wahaha():
        time.sleep(0.1)
        print('哇哈哈!')
    @wrapper_out(flage)
    def qqxing():
        time.sleep(0.1)
        print('QQ星!')
    
    wahaha = wahaha()
    print(wahaha)
    qqxing = qqxing()
    print(qqxing)

    3、多个装饰器装饰同一个函数

      俄罗斯套娃

      

    def wrapper1(func):
        def inner(*args,**kwargs):
            print('wrapper1函数装饰被装饰函数之前的函数')
            ret = func(*args,**kwargs)
            print('wrapper1函数装饰被装饰函数之后的函数')
            return ret
        return inner
    
    def wrapper2(func):
        def inner(*args,**kwargs):
            print('wrapper2函数装饰被装饰函数之前的函数')
            ret = func(*args,**kwargs)
            print('wrapper2函数装饰被装饰函数之后的函数')
            return ret
        return inner
    
    @wrapper2
    @wrapper1
    def func():
        print('被执行的函数')
        return('小混蛋骂谁?')
    
    ret = func()
    print(ret)
  • 相关阅读:
    数据可视化需要简化编程
    设计模式之工厂模式
    LinCode落单的数
    怎样安装解压版MySQL
    程序阅读:简单C++学生信息管理系统
    中缀式变后缀式
    jquery动态创建表格
    Android笔记——Activity中的回传数据案例(装备选择)
    A mail sent to Google chromium.org Groups for Help
    Eclipse导入MyEclipseproject(web项目显示为java项目解决的方法)
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/9381150.html
Copyright © 2020-2023  润新知