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

2024-10-01 19:15:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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")


Tags: inforreturndeftagtagsargscode
1条回答
网友
1楼 · 发布于 2024-10-01 19:15:16

因为在使用时:

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

或者

decorator(MyWebWelcome)("Drags")

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

相关问题 更多 >

    热门问题