Python 装饰器

def login(func):
    def inc(*args,**kwargs):
        print('login')
        return func(*args,**kwargs)
    return inc

@login
def w1(name):
    print('w1 %s' %name)

def w2():
    print('w2')

def w3():
    print('w3')

w1('jicki')

  银角大王的 解说:

 

http://www.cnblogs.com/wupeiqi/articles/4980620.html

 

def login(func):  ==>将login函数加载到内存

@login

从表面上看解释器着实会执行这两句,但是 @login 这一句代码里却有大文章,@函数名 是python的一种语法塘。

如上例@login内部会执行一下操作:

执行login函数,并将 @login 下面的 函数 作为login函数的参数。

即:@login 等价于 login(w1) 所以,

内部就会去执行:    

def inc:       

print('login')

return func()  # func是参数,此时 func 等于 w1    

return inc     # 返回的 inc,inc代表的是函数,非执行函数 其实就是将原来的 w1 函数塞进另外一个函数中 将执行完的 login 函数返回值赋值给@login下面的函数的函数名

login函数的返回值是:   

def inc:         

print('login')

return 原来w1()   # 此处的 12 表示原来的w1 函数 然后,将此返回值再重新赋值给 w1,

即: 新w1 = 

def inc:

print('login')           

return 原来w1()  所以,以后业务部门想要执行 w1函数时,就会执行 新w1 函数,在 新w1 函数内部先执行验证,再执行原来的f1函数,然后将 原来w1 函数的返回值 返回给了业务调用者。

如此一来, 即执行了验证的功能,又执行了原来w1函数的内容,并将原w1函数返回值 返回给业务调用着

posted @ 2016-06-27 10:34  丶小炒肉  阅读(95)  评论(0)    收藏  举报