zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    Guava入门第四章(Objects)
    Guava入门第三章(Preconditions)
    Guava入门第二章(Splitter)
    Guava入门第一章(Joiner)
    Docker入门第六章
    Docker遇到的问题
    Docker命令图
    2016-08-26-Java比较器的使用
    2017-10-6-MyBatis配置简述
    2017-9-17-Java Exception小结
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/9381150.html
Copyright © 2011-2022 走看看