Python:在函数内部调用装饰器

时间:2014-04-05 16:30:59

标签: python

试图了解装饰者。那么,是否可以通过内联或独立定义函数来调用函数内的装饰器?

def deco(f):
    print "In deco"
    def wrp(*args, **kwargs):
        print "In wrp"
        return f(*args, **kwargs)
    return wrp

@deco
def f1():
    print "In f1"

def f2():
    print "In f2"

def f3():
    print "In f3"
    # Calling independent function
    # Error : Invalid syntax error
    @deco
    f2()
    '''
    @deco
        f2()
    Error : IndentationError: unexpected indent
    '''
    print "End f3"

def f4():
    print "In f4"
    # Making function inline
    @deco
    def f5():
        print "In f5"
    '''
    Error : NameError: global name 'deco' is not defined
    '''
    print "End f4"

另外,f4()中的错误说明会有所帮助。

1 个答案:

答案 0 :(得分:2)

我不太确定你在这里要做什么。 @只是用于将函数包装在另一个函数中的语法糖:因此@deco的定义在f1的定义与之后的f1 = deco(f1)完全相同。

因此,在另一个函数中“使用”装饰器是没有意义的。如果你真的想,你可以这样做:

deco(f2)()

即,创建包装然后调用它,但我不知道你为什么要这样做。