【发布时间】:2016-11-09 05:21:15
【问题描述】:
RANT - 为什么人们说“装饰器是一个返回另一个函数的函数”?这个定义是没有意义的,因为如果这就是装饰器的全部,你为什么不只使用第二个函数而不用第一个函数呢? - 结束咆哮
幸运的是,我在这里找到了一个更明智的定义: http://thecodeship.com/patterns/guide-to-python-function-decorators/
很遗憾,我还是看不懂这些例子,比如这个:
def get_text(name):
return "lorem ipsum, {0} dolor sit amet".format(name)
def p_decorate(func):
def func_wrapper(name):
return "<p>{0}</p>".format(func(name))
return func_wrapper
my_get_text = p_decorate(get_text)
print my_get_text("John")
#Outputs "<p>lorem ipsum, John dolor sit amet</p>"
请注意,该帖子已有两年多的历史,作者尚未回复任何 cmets。
这是我的问题:为什么不输出
"<p>John</p>"
还是错误?整个字符串如何进入 p 标签而不只是名称?
【问题讨论】:
-
您混淆了函数和函数返回的内容。装饰器可以根据给定的参数(另一个函数)返回不同的函数。它不调用它返回的函数,但通常它返回的函数,当被调用时,会调用最初给装饰器的函数。
-
显然你没有阅读那篇文章的其余部分......它详细解释了到底发生了什么,目标是什么,以及如何使用 python 提供的工具来实现该目标。 ..
-
@JeffMercado:也许这就是为什么他提到那篇文章有一个“更合理的定义”......他没有告诉我们哪篇文章对他没有意义。
-
听起来你的困惑更深层次的根源是闭包。你知道什么是闭包以及它们是如何工作的吗?如果没有,请阅读这些内容。
-
可能是因为你对你不明白的事情大发雷霆。这不是一个好主意。
标签: python string-formatting python-decorators