python中的装饰函数(面向切面编程AOP)
AOP: 主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。
1、装饰函数简化了函数的调用方式,在没有有装饰函数前,这类函数的调用有点类似于数学中复合函数的调用,如
设y=f(u),u=g(x),f(u)=f[g(x)]
使用装饰器的例子:
def foo(func):
print 'i am a decoration'
return func
@foo
def foo1():
print 'foo'
2、装饰器可以增加计时逻辑来检测性能
例子(摘自于:http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html)
#-*- coding: UTF-8 -*-
import
time
def
foo():
'in foo()'
# 定义一个计时器,传入一个,并返回另一个附加了计时功能的方法
def
timeit(func):
# 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装
def
wrapper():
start
=
time.clock()
func()
end
=
time.clock()
'used:'
, end
-
start
# 将包装后的函数返回
return
wrapper
foo
=
timeit(foo)
foo()
注释:其中func
是一个全局变量,自己认为在用到装饰函数时,这个func是默认的参数,代表了函数的参数也是一个函数eg:>>> def foo(x):
... print 'i am a decoration'
... return func
...
>>> @foo
... def foo1():
... print 'foo'
...
i am a decoration
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "<interactive input>", line 3, in foo
NameError: global name 'func' is not defined