zoukankan      html  css  js  c++  java
  • python基础 装饰器(二)

    装饰器的进阶

    from functools import wraps     #functools.wraps  防止一些函数返回值失效
    def wrapper(func):
        @wraps(func)                #加在最内层函数正上方
        def inner():
            '''执行函数之前要做的'''
            ret =func(*args,**kwargs)
            '''执行函数之后要做的'''
            return ret
        return inner
        
    @wrapper 
    def holiday(day):
        '''这是一个放假通知'''
        print('全体放假$s天'%day)
        return '好开心'
    
    print(holiday.__name__)
    print(holiday.__doc__)
    ret = holiday(3)
    print(ret)

    带参数的装饰器

    #多层装饰器
    import time      #模块调用
    FLAGE = True              # FLAGE = Flase
    def timmer_out(flag):
        def timmer(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 timmer
    
    @timmer_out(FLAGE)
    def wahaha():
        time.time(0.1)
        print('wahahahahahaha')
    
    @timmer_out(FLAGE)
    def niuniu():
        time.sleep(0.1)
        print('niuniuniubility')
    
    wahaha()
    niuniu()

    三层装饰器

    def wrapper1(func):        #func-->f
        def inner():
            print('wrapper1 ,before func')
            func()        #f()
            print('wrapper1 ,after func')
        return inner
    
    def wrapper2(func):    #func-->inner
        def inner():
            print('wrapper2 ,before func')
            func()         #inner1()
            print('wrapper2 ,after func')
        return inner
    
    @wrapper2            #f = wrapper2(f) = wrapper2(inner1) = inner2
    @wrapper1          #f = wrapper1(f) = inner
    def f():
        print('in f')
    f()                    inner2()
  • 相关阅读:
    02-链路层
    01-TCP/IP概述
    ARM Cortex-A9 (tiny 4412)
    STM32 f407 温湿度采集报警
    arduino mega 避障报距小车
    归纳法调试
    python 数据类型Ⅲ(字典)
    Python 数据类型Ⅱ(列表,元祖)
    Python 数据类型(str,int,bool)
    Python while循环&格式化输出&运算符
  • 原文地址:https://www.cnblogs.com/soleZ/p/8144511.html
Copyright © 2011-2022 走看看