码迷,mamicode.com
首页 > 其他好文 > 详细

函数装饰器的扩展

时间:2018-01-02 21:14:51      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:war   from   div   扩展   fun   func   ida   imp   lag   

一、函数装饰器

1)带参数的装饰器:

import time
FLAGE = False
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 = timmer_out(FLAGE)
@timmer_out(FLAGE)    #wahaha = timmer(wahaha)
def wahaha():
    time.sleep(0.1)
    print(wahahahahahaha)

@timmer_out(FLAGE)
def erguotou():
    time.sleep(0.1)
    print(erguotoutoutou)

wahaha()
erguotou()

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

def wrapper1(func):
    def inner1():
        print(wrapper1 ,before func)
        ret = func()
        print(wrapper1 ,after func)
        return ret
    return inner1

def wrapper2(func):
    def inner2():
        print(wrapper2 ,before func)
        ret = func()
        print(wrapper2 ,after func)
        return ret
    return inner2

def wrapper3(func):
    def inner3():
        print(wrapper3 ,before func)
        ret = func()
        print(wrapper3 ,after func)
        return ret
    return inner3

@wrapper3
@wrapper2
@wrapper1
def f():
    print(in f)
    return 哈哈哈

print(f())

#记录用户的登录情况
#计算这个函数的执行时间

3)装饰器的固定格式——wraps版:

from functools import wraps
def wrapper(func):  #func = holiday
    @wraps(func)
    def inner(*args,**kwargs):
        print(在被装饰的函数执行之前做的事)
        ret = func(*args,**kwargs)
        print(在被装饰的函数执行之后做的事)
        return ret
    return inner

@wrapper   #holiday = wrapper(holiday)
def holiday(day):
    ‘‘‘这是一个放假通知‘‘‘
    print(全体放假%s天%day)
    return 好开心

print(holiday.__name__)
print(holiday.__doc__)
ret = holiday(3)   #inner
print(ret)


# def wahaha():
#     ‘‘‘
#     一个打印娃哈哈的函数
#     :return:
#     ‘‘‘
#     print(‘娃哈哈‘)

# print(wahaha.__name__) #查看字符串格式的函数名
# print(wahaha.__doc__)  #document

 

函数装饰器的扩展

标签:war   from   div   扩展   fun   func   ida   imp   lag   

原文地址:https://www.cnblogs.com/wanglongtai/p/8178750.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!