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) # 调用装饰器返回的函数
相关文章推荐
- 基础知识(C#语法、数据库SQL Server)回顾与总结
- java基础学习总结——基础语法1
- Java 学习 第一章 java基础语法总结
- 初学者——J2SE的基础语法总结
- java基础总结03-java基础语法2
- HTML基础语法总结
- Delphi基础语法的学习笔记和注意事项总结
- 【知识整理】javascript基础语法总结(8)——Date
- 黑马程序员_ios基础总结3_C语言基本语法二
- JavaScript事件响应的基础语法总结
- 基础知识(C#语法、数据库SQL Server)回顾与总结
- PyCharm学习笔记及Python基础语法总结
- java基础学习总结——基础语法2
- mysql基础总结 语法篇
- Java基础总结-基本语法概念-2
- 孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(十五)——JSP基础语法 任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语
- java基础学习_基础语法(上)01_day02总结
- 【知识整理】javascript基础语法总结(4)——条件和循环语句
- 基础 - 从模板语法数据绑定、指令到计算属性总结
- JavaScript面向对象基础语法总结