【发布时间】:2016-04-14 05:12:52
【问题描述】:
我很难掌握装饰器,我最初认为装饰器是语法糖,可以执行以下操作:
def decorator(x):
return x*2
@decorator
def plusone(x):
return x+1
print plusone(5)
# would print twelve, because: decorator(plusone(5)) as I have seen
# in some tutorials
但我注意到需要先在装饰器中创建一个包装函数。
为什么我们需要返回一个函数,而不是一个整数?
【问题讨论】:
-
因为装饰器就是这样做的:他们接受一个函数并返回一个新函数。您是否阅读过the documentation 和/或搜索过关于 Python 装饰器的无数解释?
-
你的装饰器本质上使它成为一个新函数(接受相同的参数)。装饰器本身不会调用(评估)您的函数,因为它不知道参数。如果你想在装饰器中返回
x() * 2,x()的参数是什么? -
@brenbarn 是的,我有,这就是我作为最后手段来到这里的原因。希望你们中的一个人能解释得更清楚一点。
-
@vjgaero:那么也许你应该解释为什么你认为装饰器的行为与你在这个问题中的建议一样。你读到了什么让你有这样的印象?
-
@brenBarn 因为我读过装饰器教程。一些导师解释说装饰器“差不多”就像我上面解释的那样。
标签: python function class decorator