【发布时间】:2020-06-22 17:51:47
【问题描述】:
考虑以下示例。
def decorator(function_to_decorate):
def wrapper():
print('Entering', function_to_decorate.__name__)
function_to_decorate()
print('Exiting', function_to_decorate.__name__)
return wrapper
@decorator
def func():
print("Original function.")
func()
由于@decorator 语法只是func = my_decorator(func) 的简写,所以my_decorator 必须返回一些东西是合乎逻辑的。我的问题是:为什么以这种方式定义装饰器而不是没有返回值:my_decorator(func)?返回包装函数wrapper的目的是什么?
编辑
除了简单的包装器之外,装饰器还能做什么?
def wrapper(function_to_decorate):
print('Entering', function_to_decorate.__name__)
function_to_decorate()
print('Exiting', function_to_decorate.__name__)
def func():
print("Original function.")
wrapper(func)
【问题讨论】:
-
如果他们没有,那么
func仍然会引用您定义的函数。 -
@kaya3 但是为什么``` def wrapper(function_to_decorate): print('Entering', function_to_decorate.__name__) function_to_decorate() print('Exiting', function_to_decorate.__name__) wrapper(func) ```还不够?
-
代码块在 cmets 中有效吗?
-
cmets 中的代码不能正常工作,您可以使用单反引号缩写
pieces of code。通常最好edit 你的问题。
标签: python decorator python-decorators