python实现带参数的decorator,pythondecorator,python的decor


python的decorator可以方便的修改函数的执行过程或者返回结果值,有时候我们需要根据情况给decorator设定参数。如下例子:

#coding=utf-8#!/usr/bin/pythondef say(worker):    print 'I am worker %s' % worker    def dec(fn):        def wraped(*argv,**kwgs):            print 'staring..'            fn(*argv,**kwgs)            print 'end.'        return wraped    return dec@say("main")def main(n):    for i in range(n):        print i*2if __name__ == "__main__":    #@say(argv) 实际上等同于 main=say(argv)(main)    main(10)

执行上例,将输出:

I am worker mainstaring..024681012141618end.

带参数的装饰器

对于无参数的装饰器(使用时如:@say),其装饰器函数的参数是要被装饰的函数对象名;而对于有参数的装饰器在调用时使用的是应用的参数,如:@say(argv)的argv,已不再是要被装饰的函数对象名,所以必须在内部再定义一个函数来接收要被装饰的函数对象。

评论关闭