为什么装饰器的参数不工作?在python中传递参数给装饰器
def decAny(f0):
def wrapper(s0):
return "<%s> %s </%s>" % (any, f0(), any)
return wrapper
@decAny('xxx')
def test2():
return 'test1XML'
print(test2())
总是给我一个错误说“str是不可呼叫” 它试图执行返回字符串包装(内) ,而不是对其进行处理并返回结果字符串
想想这样说:你之前甚至_get_装饰'test2',你叫'decAny('xxx')'。但'decAny'接受一个函数,'f0',而不是一个字符串。很明显,在某个时候,'f0()'会试图调用''xxx''。 – abarnert 2013-03-25 21:16:42
好吧,但是像没有参数的修饰器一样,为什么编译器不会假定第一个参数是客户端函数... – ZEE 2013-03-25 21:48:15
这不是参数问题。如果你有'@ decAny',那就是使用'decAny'本身作为装饰器。但是如果你有'@decAny()',那么在你装饰之前就调用'decAny',就像'@decAny('xxx')'一样。 (这就像当你将函数作为值传递时一样,将它们存储在变量等中,而不是调用它们) – abarnert 2013-03-25 21:57:56