我的问题围绕着已实现的Python装饰器的预期生命周期。来自realpython.org它说:
''根据定义,装饰器是一个带有另一个函数的函数 并且没有明确地扩展后一个函数的行为 修改它。''
对我来说,似乎在网上的例子中经常使用装饰器来临时修改或扩展python函数,例如在html格式化示例中。
示例:
假设我在一家网络开发公司工作,在我的所有网页的顶部,我称之为Python函数page_welcome()
。
def page_welcome():
return "Welcome to XYZ's company webpage!"
现在,一些开发人员加入公司并决定我们应该通过使用粗体和斜体修改功能来使其更加突出。
def makebold(fn):
def wrapped():
return "<b>" + fn() + "</b>"
return wrapped
def makeitalic(fn):
def wrapped():
return "<i>" + fn() + "</i>"
return wrapped
@makebold
@makeitalic
def page_welcome():
return "Welcome to XYZ's company webpage!"
如果我们认为这种变化是永久性的,那么装饰者是这种永久性修改的最佳方式吗?
注意:上面的示例是此链接中的装饰器示例(略有修改): How to make a chain of function decorators?
答案 0 :(得分:3)
装修&#39;主要目的不是临时修改功能行为。 “&#34;暂时&#34;这里很奇怪。最好将它们视为责任分解和代码重用。它们主要用于添加一些不是唯一绑定到装饰功能的行为,也可以用于其他功能。一个很好的例子是@memoized
装饰器,它记住由装饰函数计算的值(可能需要花费很多时间来计算),并且下次立即返回值。这样的装饰器可以多次重复使用,除此之外,它使核心更具可读性:不是通过记忆代码膨胀你的功能,而是添加一行,清楚地说明实际发生的情况。