那么什么是装饰器?
现在我们知道装饰器实际就是函数,我们也知道他们接受函数对象。但它们是怎样处理那些函数的呢?
一般来说,当你包装一个函数的时候,你最终会调用它。
最棒的是我们能在包装的环境下在合适的时机调用它,我们在执行函数之前,可以运行写预备代码。
def foo():
print 'aaaaaaa'
a=foo()
print a
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/ddd/a16.py
aaaaaaa
None
from time import ctime,sleep
def tsfunc(func):
def wrappendFunc():
print '[%s] %s() called' % (ctime(), func.__name__)
return func()
return wrappendFunc
@tsfunc
def foo():
print 'aaaaaaa'
a=foo()
print a
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/eee/a2.py
[Tue Apr 24 11:26:50 2018] foo() called
aaaaaaa
None
在启动和模块导入代码之后,tsfunc()函数是一个显示何时调用函数的时戳的装饰器。
它定义了一个内部的函数wrappedFunc(),该函数增加了时戳以及调用了目标函数。
装饰器的返回值是一个"包装了"的函数