以下是我看见python装饰器的一些我不熟悉的特点,所以记录一下
1 装饰器的特性:
1.1 可以吧被装饰的函数替换成不同的函数 decorate(func)。
1.2 加载模块时候立即执行。这点很有用
这里我们可以给出最简单的装饰器
def decorate(func):
print 'im a func'
return func
@decorate
def foo(s):
return 'the name is me %s' % s
#启动程序
[out]
im a func
2 闭包的特点:
2.1 inner 能访问 outer 及其祖先函数的命名空间内的变量(局部变量、函数参数)
2.2 调用 outer 已经返回了,但是他的命名空间被返回的 inner 对象引用,所以不会被回收
3 functool.wraps(func):
总结起来就是保存了func的 __name__, __doc__ 等信息,例如:

# -*- coding: utf-8 -*-
import functools
def wrap1(func):
@functools.wraps(func)
def inner():
print 'wrap1'
return func()
return inner
def wrap2(func):
def inner():
print 'wrap2'
return func()
return inner
@wrap1
def func1():
print 'func1'
return
@wrap2
def func2():
print 'func2'
return
if __name__ == '__main__':
print 'have wrap: ' + func1.__name__
print 'have not wrap: ' + func2.__name__
[output:]
have wrap: func1
have not wrap: inner
来源:http://www.cnblogs.com/fuzzier/p/7588975.html
