我是python decorator的新手。请帮助我。需要第一个输出。我不明白为什么第二个和第三个装饰器会两次装饰“ p”,“ i”,“ b”标签。
def AddTags(*tags):
def decorator(oldFunc):
def inside(*args, **kwargs):
code = oldFunc(*args, **kwargs)
for tag in reversed(tags):
code = "<{0}>{1}</{0}>".format(tag, code)
return code
return inside
return decorator
@AddTags("p", "i", "b")
def MyWebWelcome(name):
return "Welcome "+name+" To my blog!"
MyWebWelcome("Drags")
# Wrong Usage
AddTags("p", "i", "b")(MyWebWelcome)("Drags")
# Wrong
def decorator(oldFunc):
def inside(*args, **kwargs):
code = oldFunc(*args, **kwargs)
for tag in reversed(["p", "i", "b"]):
code = "<{0}>{1}</{0}>".format(tag, code)
return code
return inside
decorator(MyWebWelcome)("Drags")
答案 0 :(得分:0)
因为要使用:
AddTags("p", "i", "b")(MyWebWelcome)("Drags")
或
decorator(MyWebWelcome)("Drags")
MyWebWelcome
功能已已修饰为@AddTags("p", "i", "b")
。
@decorator
表单应用于函数 声明 时间。
因此,第二个和第三个调用将添加另一层相同的装饰(用“ p”,“ i”,“ b”标签将字符串包装两次)