Python 为什么这两个装饰返回不同的结果?
我是python装饰师的新手。请帮帮我。第一个输出是需要的。我不明白为什么第二个和第三个装饰师装饰“p”“I”“b”标签两次Python 为什么这两个装饰返回不同的结果?,python,python-3.x,python-decorators,Python,Python 3.x,Python Decorators,我是python装饰师的新手。请帮帮我。第一个输出是需要的。我不明白为什么第二个和第三个装饰师装饰“p”“I”“b”标签两次 def AddTags(*tags): def decorator(oldFunc): def inside(*args, **kwargs): code = oldFunc(*args, **kwargs) for tag in reversed(tags): cod
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")
def AddTags(*标记):
def decorator(oldFunc):
def内部(*args,**kwargs):
代码=oldFunc(*args,**kwargs)
对于反向中的标记(标记):
code=“{1}”。格式(标记,代码)
返回码
返回内部
返回装饰器
@添加标签(“p”、“i”、“b”)
def MyWebWelcome(名称):
返回“欢迎”+姓名+“到我的博客!”
MyWebWelcome(“拖拉”)
#错误用法
添加标签(“p”、“i”、“b”)(MyWebWelcome)(“Drags”)
#错
def decorator(oldFunc):
def内部(*args,**kwargs):
代码=oldFunc(*args,**kwargs)
对于反向([“p”、“i”、“b”])中的标记:
code=“{1}”。格式(标记,代码)
返回码
返回内部
装饰师(MyWebWelcome)(“Drags”)
因为在使用时:
AddTags("p", "i", "b")(MyWebWelcome)("Drags")
或
MyWebWelcome
功能已经用@AddTags(“p”、“i”、“b”)
修饰了@decorator
表单应用于函数声明时间。因此,第二次和第三次呼叫将添加另一层相同的装饰(将带有“p”、“i”、“b”标记的字符串包装两次)
decorator(MyWebWelcome)("Drags")