【发布时间】:2025-11-26 17:30:01
【问题描述】:
我想要一个装饰器,它可以在定义时将一个函数添加到任何类型的函数集合中。 我对装饰器的理解是在调用装饰函数时调用装饰器,如下例所示:
def my_decorator(func):
def inner():
print("I am making things nicer")
func()
return inner
print("Function is defined")
@my_decorator
def my_function():
print(f"I am doing something")
print("Function is called")
my_function()
输出:
Function is defined
Function is called
I am making things nicer
I am doing something
有很多关于其工作原理的资源 (my_decorator(my_function) ...)。
但是,如果内部函数没有调用而是返回f(),那么装饰器在被装饰函数定义时被调用。
def my_decorator():
def inner(f):
print("I am making things nicer")
return f
return inner
print("Function is defined")
@my_decorator()
def doing_something():
print(f"I am doing something")
print("Function is called")
doing_something()
输出:
Function is defined
I am making things nicer
Function is called
I am doing something
这正是我想要实现的,但我不知道它是如何工作的。我还发现它只能与额外的括号 (@my_decorator()) 一起使用,而普通装饰器不需要。
我的问题是:
- 这是一种有效的装饰器类型吗?
- 它是如何工作的?为什么定义函数的时候会调用装饰器?
【问题讨论】:
标签: python-3.x python-decorators