一、装饰器不带参,被装饰函数不带参
from time import ctime
def InsertTimestamp(f):
def decorator():
strInfo='[%s] %s() called'%(ctime(),f.__name__)
print strInfo
return f()
return decorator
@InsertTimestamp
def func():
pass
内部定义的装饰器函数decorator()不带有参数,执行结果:
>>> from decorator import func
>>> func()
[Sat Jan 7 10:19:13 2017] func() called
二、装饰器不带参,被装饰函数带参
def InsertTimestamp2(f):
def decorator(*args,**kwargs):
strInfo='[%s] %s() called'%(ctime(),f.__name__)
print strInfo
return f(*args,**kwargs)
return decorator
@InsertTimestamp2
def func2(seq=[1,2,3,4,5]):
for var in seq:
print var
内部定义的装饰器函数decorator()用来接收被装置函数的参数,执行结果:
>>> from decorator import func2
>>> func2([1,2,3])
[Sat Jan 7 10:30:47 2017] func2() called
1
2
3
三、装饰器带参,被装饰函数可带可不带参
def InsertTimestampWithArgs(auth):
def decorator_maker(f):
def decorator(*args,**kwargs):
strInfo='[%s] %s() called By %s'%(ctime(),f.__name__,auth)
print strInfo
return f(*args,**kwargs)
return decorator
return decorator_maker
@InsertTimestampWithArgs('Hyman')
def func3():
pass
装置器带参,相当于在接收被装饰函数作为参数的装饰器前面,再包装了一层带参的函数,执行结果如下:
>>> from decorator import func3
>>> func3()
[Sat Jan 7 10:45:29 2017] func3() called By Hyman
Github 位置:
https://github.com/HymanLiuTS/PythonTs
克隆本项目:
git clone git@github.com:HymanLiuTS/PythonTs.git
获取本文源代码:
git checkout PL01