对于无参数的装饰器,其装饰器函数的参数是要被装饰的函数对象名;
对于有参数的装饰器在调用时使用的是应用的参数,@timeStumpFunc_args(argv)的argv,已不再是要被装饰的函数对象名,所以必须在内部再定义一个函数getfunc()来接收要被装饰的函数对象。
#!/usr/bin/env python
# coding=gbk
"""
__title__ = '带参数和不带参数的timeStump'
__author__ = 'pi'
__mtime__ = '2014.12.12'
"""
from time import ctime
def timeStumpFunc(func):
"""time stump decorator of func 不带参数的时间戳函数"""
def wrappedFunc(*nkw):
print("start_time %s" % ctime())
func(*nkw)
print("end_time %s" % ctime())
return wrappedFunc
def timeStumpFunc_args(args):
"""time stump decorator of func 不带参数的时间戳函数"""
print "timeStump for function %s" % args
def getFunc(func):
def wrappedFunc(*nkw):
print("start_time %s" % ctime())
func(*nkw)
print("end_time %s" % ctime())
return wrappedFunc
return getFunc
@timeStumpFunc
# @timeStumpFunc_args('do_sth')
def do_sth(*nkw):
print "%s" % nkw
if __name__ == '__main__':
do_sth('i you love')
http://outofmemory.cn/code-snippet/1107/python-achieve-carry-parameter-decorator
原文:http://blog.csdn.net/pipisorry/article/details/41902599