【发布时间】:2020-04-08 05:39:06
【问题描述】:
我是 Python 的新手(我来自 Java 和 C#)
我正在研究 decorator 主题。所以我有以下例子:
# DECORATOR:
def my_decorator(func):
def wrap_func():
print('**************')
func()
print('**************')
return wrap_func
@my_decorator
def hello():
print('Hello World')
hello()
在我看来,这是逻辑(但我不确定:
我正在定义一个 my_decorator 函数,以另一个函数作为参数。这个 my_decorator 函数将作为参数传递的函数包装到执行作为参数传递的函数的 wrap_func() 函数中。另外这个 wrap_func() 函数可以在作为参数传递的函数执行前后执行一些额外的逻辑(它是对原始函数的装饰。
要告诉解释器一个特定的函数必须使用装饰器,我必须在函数定义之前使用语法 @decorator_name。
所以在我的情况下:当我执行 hello() 调用时:Python 知道 hello() 函数必须由 my_decorator 装饰> 装饰器,所以它不直接执行 hello() 函数,而是执行 my_decorator() 函数,将 hello() 引用作为参数传递.因此它可以在 hello() 调用之前和之后添加额外的逻辑。
这个推理是正确的还是我错过了什么?
我还有一个疑问:为什么装饰器函数返回包装我们装饰逻辑的函数?
【问题讨论】:
-
您在发帖前是否阅读过有关该主题的任何内容?我猜不是……
-
这能回答你的问题吗? How to make a chain of function decorators?
标签: python python-3.x python-decorators