装饰器:
学习Python函数和函数式编程中最后一个可能也是最难懂的概念就是装饰器(decorator).
在这里,Python的装饰器指的是一种让你能改变或者说"装饰"函数行为的机制,它能让函数执行一些和原本设计不同,
或是在原有基础上额外的操作。
装饰器是也可以说是对函数的一个包装,这些额外的任务包括写日志,计时,过滤等。
Python里一个被包裹或装饰的函数(对象)通常会被重新赋值给原来的名字,这样被包裹的函数能和普通
的版本保持兼容---因为使用装饰器就是在现有的功能上再"加盖"额外的功能。
最简单的语法形式是这样的:
@deco
def foo():
pass
在这个例子里,deco就是一个装饰了foo函数的装饰器函数(decorator function).
它先把foo函数拿过来,加上一些额外功能后再重新赋值给foo.
@deco的语法和下面的代码是等价的(假设这里的foo是一个有效的函数对象)
下面这个简单的例子记录了函数调用的发生:
def log(func):
def wrappedFunc():
print "*** %s() called" % func.__name__
return func()
return wrappedFunc
@log
def foo():
print "inside foo()"
foo()
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a7.py
*** foo() called
inside foo()
Process finished with exit code 0