装饰器的实际就是函数,他们接受函数对象,在适当处调用函数或者至少一些引用,返回值是一个包装了的函数对象
装饰器又分为有参和无参装饰器,无参的装饰器就是本身是一装饰器,直接把被装饰函数作为参数,进行相关操作,有参数的装饰器就是通过传入的参数,返回一个装饰器对象,然后实现对被装饰函数的操作
#!/usr/bin/env python from time import ctime, sleep def tsfunc(func): def wrappedFunc(): print '[%s] %s() called' % (ctime(), func.__name__) return func()#此处实现对被装饰函数的调用 return wrappedFunc#返回一个已包装的函数对象 @tsfunc def foo(): print 'inner of foo' foo() sleep(4) for i in range(2): sleep(1) foo()
运行结果为
[Mon Feb 17 01:31:57 2014] foo() called inner of foo [Mon Feb 17 01:32:02 2014] foo() called inner of foo [Mon Feb 17 01:32:03 2014] foo() called inner of foo