首页 > 其他 > 详细

装饰器进阶

时间:2019-03-09 15:13:47      阅读:124      评论:0      收藏:0      [点我收藏+]

装饰器的进阶

内容有三:

1):functools.wraps

2):带参数的装饰器

3):多个装饰器装饰同一个函数

 

查看函数名和注释

①查看函数名(字符串格式):函数名.____name____

②查看注释:函数名.____doc____

技术分享图片

(1)functools.wraps

 

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):
    ‘‘‘
    注释
    :param day:
    :return:
    ‘‘‘
    print(‘放假%s天‘%day)
    return ‘好开心‘
print(‘加functools.wraps之后:‘,holiday.__name__)#查看函数名字,此时为holiday本身
print(holiday.__doc__) #查看函数注释内容

ret = holiday(3)
print(ret)

三层装饰器:(即使有几百个被装饰的函数只需要修改FLAG就可以实现,使用或者不使用装饰器)(当FALG=False时不使用,反之则使用)

 

import time
FLAGE = False
def temmer_out(flag):
    def temmer(func): #func = qqxing
        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 temmer

@temmer_out(FLAGE)  #qqxing = temmer(qqxing)
def qqxing():
    time.sleep(0.1)
    print(‘QQ星星‘)
    return 1

print(qqxing())#inner

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

def wrapper1(func):   #func ----->f
    def inner1():
        print(‘wrapper1,before func‘)
        func()        #f
        print(‘wrapper1,after func‘)
    return inner1

def wrapper2(func):   #func----->inner1
    def inner2():
        print(‘wrapper2,before func‘)
        func()        #inner1
        print(‘wrapper2,after func‘)
    return inner2

@wrapper2             # f =wrapper2(f)-----> wrapper2(inner1) = inner2
@wrapper1             # f = wrapper1(f)  = inner1
def f():
    print(‘in f‘)
f()

  

 

装饰器进阶

原文:https://www.cnblogs.com/twinkle-/p/10500719.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!