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

day14 带函数的装饰器、多个装饰器装饰一个函数

时间:2017-07-29 23:23:09      阅读:353      评论:0      收藏:0      [点我收藏+]

标签:装饰器   函数   wap   ret   for   []   turn   admin   执行   

一、带参数的装饰器;------开关

__author__ = Administrator
F=True
def outer(F):
    def wap(fun):#gg
        def inner(*args,**kwargs):
            if F:
                print("inner   before")
                ret=fun(*args,**kwargs)#gg()
                print("inner   after")
            else:
                ret=fun(*args,**kwargs)
            return  ret
        return inner
    return wap

@outer(F) #先执行out(F) ----@wap----->gg=wap(gg)
def gg():
    print("gg............")
gg()#inner()

二、多个装饰器装饰一个函数

__author__ = Administrator
def yn(fun):#fun=sc_inner
    def yn_inner(*args,**kwargs):
        print("yun..........before")
        ret=fun(*args,**kwargs)#sc_inner()
        print("yn...........after")
        return ret
    return yn_inner

def sx(fun):#fun=china
    def sx_inner(*args,**kwargs):
        print("sx..........before")
        ret=fun(*args,**kwargs)#china()
        print("sx...........after")
        return ret
    return sx_inner

@yn #china=yn(china)-----china=yn(sx(china))----china=yn(sx_inner)---->china=yn_ineer
@sx  #china=sx(china)----china=
def china():
    print("china is good ")

china()#yn_inner()

三、装饰器的一个应用

l = []
def wrapper(func):
    l.append(func)  #统计当前程序中有多少个函数被装饰了
    def inner(*args,**kwargs):
        #l.append(func)  #统计本次程序执行有多少个带这个装饰器的函数被调用了
        ret = func(*args,**kwargs)
        return ret
    return inner

@wrapper  #f1 = wrapper(f1)
def f1():
    print(in f1)

@wrapper #f2 = wrapper(f2)
def f2():
    print(in f2)

@wrapper #f2 = wrapper(f2)
def f3():
    print(in f3)
print(l)

 

day14 带函数的装饰器、多个装饰器装饰一个函数

标签:装饰器   函数   wap   ret   for   []   turn   admin   执行   

原文地址:http://www.cnblogs.com/ctztake/p/7257721.html

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