您的位置:首页 > 编程语言 > Python开发

Python装饰器基础语法总结

2012-05-08 12:27 155 查看
def require_login(func):                    # 传入func这个参数,是需要被装饰的函数
def proxy_func(self,*args,**kw):        # 这个函数对象,就是原始的函数:some_func被装饰后返回的函数对象。当然是在它被调用时才会执行。
print _web.input()                 # 做一些操作
return func(self,*args,**kw)       # 返回原始的函数,并加上参数
return proxy_func                       # 返回内层的函数对象


而真实的顺序是这样的:

1> def require_login(func):
3>    def proxy_func(self,*args,**kw):
4>        print _web.input()
5>        return func(self,*args,**kw)
2>    return proxy_func


@require_login
def some_func():
pass


上面的意思与下面的样子一样:

some_func_decoratored = require_login(some_func)


当执行some_func_decoratored()的时候,就相当于执行了上面的内层的函数。

整个过程大致如下:
1. 外层的require_login函数将some_func函数作为参数传入
2. 内层的proxy_func在执行时会将它捕捉到的环境参数带入,这里包括了外层函数require_login传入的func参数
3. 执行完了require_login(some_func)之后,会返回一个函数对象:proxy_func
4. proxy_func其实就是被装饰完成的函数对象,在调用some_func_decoratored()时,proxy_func执行!

而带有参数的装饰器,如下:

@eventhandler('BUTTON')
def some_func(args):
pass


执行语义如下:

def some_func(args):
pass
temp = eventhandler('BUTTON')    # 使用提供的参数调用装饰器
some_func = temp(some_func)        # 调用装饰器返回的函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: