为什么带参数的装饰器不起作用?
def decAny( f0 ):
def wrapper( s0 ):
return "<%s> %s </%s>" % ( any, f0(), any )
return wrapper
@decAny( 'xxx' )
def test2():
return 'test1XML'
print( test2() )
总是提示“str不可调用”的错误,它试图在wrapper()内执行返回的字符串,而不是处理并返回结果字符串。
test2
之前,你就调用了decAny('xxx')
。但是decAny
需要一个函数f0
,而不是一个字符串。因此很明显,在某个时候,f0()
将尝试调用'xxx'
。 - abarnert@decAny
,那么就是将decAny
本身作为装饰器。但是如果你使用@decAny()
,那么在装饰之前就会调用decAny
,就像使用@decAny('xxx')
一样。(这就像当你将函数作为值传递,存储到变量中等,而不是进行调用)。 - abarnert