【发布时间】:2015-02-05 04:09:28
【问题描述】:
def make_bold(fn):
return lambda : "<b>" + fn() + "</b>"
def make_italic(fn):
return lambda : "<i>" + fn() + "</i>"
@make_bold
@make_italic
def hello():
return "hello world"
helloHTML = hello()
输出:"<b><i>hello world</i></b>"
我大致了解装饰器以及在大多数示例中它如何与其中之一一起使用。
在这个例子中,有 2 个。从输出看,似乎@make_italic先执行,然后@make_bold。
这是否意味着对于装饰函数,它会先运行该函数,然后再向顶部移动其他装饰器?比如@make_italic,然后是@make_bold,而不是相反。
所以这意味着它不同于大多数编程语言中自顶向下方法的规范?只是为了这个装饰器?还是我错了?
【问题讨论】:
-
是的,它从下往上开始,将结果传递给下一个
-
@PadraicCunningham 评论也是答案的重要部分。有相关问题 (stackoverflow.com/questions/47042196/…)
-
我会说它仍然是自上而下的,因为
a(b(x))是自上而下的(如果您想象分成 3 行)
标签: python decorator python-decorators