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函数返回值 返回给业务调用着

浙公网安备 33010602011771号