【发布时间】:2017-06-06 06:43:42
【问题描述】:
您能否帮助我了解是否可以使用带有装饰器和不带装饰器的函数。
例子:
def makeitalic(fn):
def wrapped():
return "<i>" + fn() + "</i>"
return wrapped
@makeitalic
def hello():
return "hello, sir or madam!"
我想到的唯一方法:
def hello():
return "hello, sir or madam!"
@makeitalic
def italic_hello():
return(hello())
那么,没有装饰器可以使用 hello() 吗?
【问题讨论】:
-
请注意,
italic_hello = makeitalic(hello)会更简单——这基本上就是@makeitalic的语法糖所做的。 -
您可以将实际函数作为属性分配给
wrapped。 -
如果您需要这种动态行为,请不要使用装饰器。
-
我将对此进行一些扩展,因为我认为这个骗子解决了细节问题,而不是更大的图景。装饰器的目的是表达一个“静态”的源级组合。如果您想到的是某种运行时、可以完成、撤消、修改等的动态组合,那么装饰器不是您想要的。
标签: python