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)
  • 相关阅读:
    ContentProvider简单介绍
    hdu 1087 Super Jumping! Jumping! Jumping!(dp 最长上升子序列和)
    点点文刊 -- 记录生活的色彩
    【struts2+hibernate4】小型电子商务站点
    IOS学习之蓝牙4.0
    POJ 1988 Cube Stacking (种类并查集)
    Android开发之 shape的使用
    妄想性仮想人格障害 新手教程 +改动器
    Spring 的 ApplicationEvent and ApplicationListener
    Offer是否具有法律效力?
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/9381150.html
Copyright © 2011-2022 走看看