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


 

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

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


 

评论关闭