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)
  • 相关阅读:
    Java判断字符串是否包含数字
    char 与 String 之间的转换
    hive与hbase整合方式和优劣
    曾经的你-许巍
    Hbase表重命名 表改名
    Eclipse 快键键(持续更新)
    Linux 查看一个端口的连接数
    hbase性能调优(转载)
    Hbase优化记录
    记录下Linux难记实用的命令
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/9381150.html
Copyright © 2011-2022 走看看