装饰器

 

#定义函数:
def hello(*args,**kw):
    print 'ab'
    print args
    print kw
args=range(1,5)

hello(args) #返回值:
ab
([1, 2, 3, 4],)
{}

#定义装饰函数:
def dec(fun):
    def wrapper(*args,**kw):
        print 'do sth. before'
        fun(*args,**kw)
        print 'do sth. after'
    return wrapper

dec(hello(args)) #将hello函数及参数当做变量赋予dec,只相当于直接执行hello(args),返回值:
ab
([1, 2, 3, 4],) {}


p=dec(hello)
p(args)

dec(hello)(args) #将函数当做变量赋予dec,然后通过变量调用函数,再赋予变量变量,返回值:
do sth. before
ab
([1, 2, 3, 4],)
{}
do sth. after

 

def dec(fun):
    def wrapper(*args,**kw):
        print 'do sth. before'
        fun(*args,**kw)          #此处如果改为 return fun(*args,**kw),则下一句print 'after'不会再执行。在函数中,遇到第一个return则不会再执行后面的语句,如果返回两个值,可以写在同一行。如果用了return,函数执行完会得到结果,没有return则无返回值 print 'do sth. after'
    return wrapper

@dec #通过@调用装饰函数
def hello(*args,**kw):
    print 'ab'
    print args
    print kw
args=range(1,5)

hello(args)

 

你可能感兴趣的:(装饰器)