【发布时间】:2021-08-17 17:27:48
【问题描述】:
假设我有一个简单的函数返回它自己的名字
def foo():
print(foo.__name__)
当然调用时的输出是foo。
但是,如果我们现在用这样的装饰器装饰该函数:
def dec(func):
print(dec.__name__)
def wrapper(*args):
print(wrapper.__name__)
return func(*args)
return wrapper
@dec
def foo():
print(foo.__name__)
foo()
我们得到
dec
wrapper
wrapper
这里为什么叫内部函数的名字?
func(*args) 是专门调用的,不应该是真正的函数名和dec wrapper 之间的关系吗?
【问题讨论】:
-
这能回答你的问题吗? Get the name of a decorated function?
-
我想知道原因,不是解决这个问题的办法
-
哦,我明白了。这回答了你的问题了吗? What does functools.wraps do? “当你使用装饰器时,你是在用另一个函数替换一个函数。”
-
@wjandrea 很好。我会删除我的答案。
-
非常感谢:)