试着去理解装饰师。那么,是否可以通过内联或独立地定义函数来调用函数内部的装饰器?
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()中的错误进行解释也很有帮助。
发布于 2014-04-05 16:54:01
我不太清楚你想在这里做什么。@只是将一个函数包装在另一个函数中的语法糖:所以在定义f1之前的@deco与后来的f1 = deco(f1)完全相同。
因此,在另一个函数中“使用”装饰器是没有意义的。如果你真的愿意,你可以这样做:
deco(f2)()呃,创建包装,然后调用它,但我不知道你为什么要这样做。
https://stackoverflow.com/questions/22883604
复制相似问题