Python装饰器与传递函数

时间:2017-04-12 22:00:20

标签: python python-decorators

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 个答案:

答案 0 :(得分:8)

  

在这段代码中,为什么不直接定义函数makeitalic()和makebold()并传入函数hello?

你当然可以!装饰者只是语法糖。在幕后,会发生什么:

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

变为:

def hello():
    return "hello world"

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