试图了解装饰者。那么,是否可以通过内联或独立定义函数来调用函数内的装饰器?
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()中的错误说明会有所帮助。
答案 0 :(得分:2)
我不太确定你在这里要做什么。 @
只是用于将函数包装在另一个函数中的语法糖:因此@deco
的定义在f1
的定义与之后的f1 = deco(f1)
完全相同。
因此,在另一个函数中“使用”装饰器是没有意义的。如果你真的想,你可以这样做:
deco(f2)()
即,创建包装然后调用它,但我不知道你为什么要这样做。