繁体   English   中英

为什么这两个装饰器返回不同的结果?

[英]Why these two decorators return different results?

我是 python 装饰器的新手。 请帮助我。 需要第一个输出。 我不明白为什么第二个和第三个装饰器装饰“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")

因为在使用点上:

AddTags("p", "i", "b")(MyWebWelcome)("Drags")

或者

decorator(MyWebWelcome)("Drags")

MyWebWelcome函数已经@AddTags("p", "i", "b")修饰。
@decorator形式应用于函数声明时。
因此,第二次和第三次调用将添加另一层相同的装饰(用“p”、“i”、“b”标签包装一个字符串两次)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM