首页 > 其他 > 详细

装饰器函数

时间:2019-03-22 21:19:02      阅读:150      评论:0      收藏:0      [点我收藏+]

装饰器

装饰器的主要功能:在不改变函数调用方式的基础上在函数的前、后添加功能。

装饰器的固定格式:

def timer(func):
    def inner(*args,**kwargs):
        ‘‘‘执行函数之前要做的‘‘‘
        re = func(*args,**kwargs)
        ‘‘‘执行函数之后要做的‘‘‘
        return re
    return inner
技术分享图片
#装饰的固定格式和运用
import time
def timmer(func):
    def inner(*args,**kwargs):
        start = time.time()
        ret =func(*args,**kwargs)
        end=time.time()-start
        print(end)
        return ret
    return inner

@timmer
def ceshi():
    time.sleep(0.2)
    print(测试成功)
ceshi()

@timmer
def ceshi2():
    time.sleep(0.3)
    print(测试成功)
ceshi2()

#假如你有成千上万个函数使用了一个装饰器,现在你想把这些装饰器都取消掉,你要怎么做?
# 一个一个的取消掉? 没日没夜忙活3天。。。
# 过两天你领导想通了,再让你加上。。。
import time
FLAG=False      #只需要改变FLAG的变量
def outer(flag):
    def timmer(func):
        def inner(*args,**kwargs):
            if flag:
                start = time.time()
                ret =func(*args,**kwargs)
                end=time.time()-start
                print(end)
                return ret
            else:
                ret =func(*args,**kwargs)
                return ret
        return inner
    return timmer

@outer(FLAG)
def ceshi():
    time.sleep(0.2)
    print(测试成功)
ceshi()

@outer(FLAG)
def ceshi2():
    time.sleep(0.3)
    print(测试成功)
ceshi2()
装饰器例子

带参数的装饰器

def outer(flag):
    def timer(func):
        def inner(*args,**kwargs):
            if flag:
                print(‘‘‘执行函数之前要做的‘‘‘)
            re = func(*args,**kwargs)
            if flag:
                print(‘‘‘执行函数之后要做的‘‘‘)
            return re
        return inner
    return timer

@outer(False)
def func():
    print(111)
func()

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

def wrapper1(func):
    def inner():
        print(wrapper1 ,before func)
        func()
        print(wrapper1 ,after func)
    return inner

def wrapper2(func):
    def inner():
        print(wrapper2 ,before func)
        func()
        print(wrapper2 ,after func)
    return inner

@wrapper2
@wrapper1
def f():
    print(in f)

f()

装饰器函数

原文:https://www.cnblogs.com/yzcstart/p/10580844.html

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