Python装饰器与传递函数

11
def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped

def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

@makeitalic
@makebold
def hello():
    return "hello world"

print(hello()) ## returns "<b><i>hello world</i></b>"
在这段代码中,为什么不直接定义makeitalic()和makebold()函数并将hello函数作为参数传递呢?
我是不是漏掉了什么?或者说修饰器真的更适用于更复杂的事情吗?
1个回答

8
在这段代码中,为什么不直接定义makeitalic()和makebold()函数并将hello函数作为参数传递呢?
当然可以!装饰器只是语法糖。实际上,在底层发生的事情是:
@makeitalic
@makebold
def hello():
    return "hello world"

成为:

def hello():
    return "hello world"

hello = makebold(hello)
hello = makeitalic(hello)

谢谢,这种情况下似乎不必要。我相信它们在其他用例中提供简洁性。 - Sam Dillard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接