我写了这样一个函数修饰符:
def tsfunc(func):
def wrappedFunc():
print '%s() called' % func.__name__
return func()
return wrappedFunc()
@tsfunc
def foo():
pass
foo() # to get it work, use foo instead of foo()
foo()
我收到以下错误消息:
^{pr2}$我用“foo()”替换“foo()”就可以了。但我还是没有得到我期望的结果:
foo() called
似乎foo
函数只调用一次。在
请帮我理解为什么会发生这种事。在
您应该返回包装器函数本身,而不是其结果:
Decorators用decorator的返回值替换装饰项:
^{pr2}$相当于:
扩展到(在您的代码中):
所以您用
wrappedFunc()
调用的结果替换函数foo
,而不是wrappedFunc
本身。在您需要删除中的括号
decorator应该返回包装器函数,而不是调用它。在
使用此修复程序,代码将生成:
^{pr2}$相关问题 更多 >
编程相关推荐