在了解装饰器的之前一定要先了解函数作为参数传递, 什么是函数内嵌,请参考我之前写的博客函数简介
python装饰器思想有点类似设计模式的装饰模式, 其意图是动态地给函数对象添加额外的功能.比如像增加日志打印的功能,有点面向切面编程(AOP)的感觉.
以@开头,接着后面跟着的是装饰器的名字和可选的参数.装饰器语法是一种语法糖.
格式如下
@decomaker(deco_args)
def foo(func_opt_args)
可以组合,等价于foo = g(f(foo))
@g
@f
def foo():
statement
实例
#!/usr/bin/python
def deco(func):
print ‘start‘
func()
print ‘end‘
return func
@deco
def foo():
print ‘In foo‘
foo()
foo()
输出
start
In foo
end
In foo
In foo
内嵌函数保证每次新函数都被调用
实例
def deco(func):
def _deco(): #该函数为内嵌函数
print ‘start‘
func()
print ‘end‘
return _deco
@deco
def foo():
print ‘In foo‘
foo()
foo()
输出:
start
In foo
end
start
In foo
end
需要自己返回以函数作为参数的装饰器。换句话说,decomaker()用 deco_args 做了些事并返回
函数对象,而该函数对象正是以 foo 作为其参数的装饰器。简单的说来:foo = decomaker(deco_args)(foo)
实例
def deco(arg):
def wrapper(func):
def _deco(x):
print "get param is: ", x
func(x)
return _deco
return wrapper
@deco("type1")
def foo(x):
print ‘In foo‘
foo(123)
输出
get param is: 123
In foo
原文:http://blog.csdn.net/csujiangyu/article/details/44201563