Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么这两个装饰返回不同的结果?_Python_Python 3.x_Python Decorators - Fatal编程技术网

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

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

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

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