首页 > 代码库 > python带参数和不带参数装饰器

python带参数和不带参数装饰器

http://blog.csdn.net/pipisorry/article/details/41902599

对于无参数的装饰器,其装饰器函数的参数是要被装饰的函数对象名;

对于有参数的装饰器在调用时使用的是应用的参数,@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')



from:http://blog.csdn.net/pipisorry/article/details/41902599

ref:Python装饰器:简单装饰,带参数装饰与类装饰器

http://outofmemory.cn/code-snippet/1107/python-achieve-carry-parameter-decorator


python带参数和不带参数装饰器