我试图弄清楚为什么在使用装饰器时我需要一个嵌套函数。这是一个例子:
def func(f):
def deco(*args, **kwargs):
return f(*args, **kwargs)
return deco
@func
def sum(a, b):
return a+b
print sum(5, 10)
代码有效,一切都很好。但为什么我需要创建嵌套的“deco”函数?
让我们尝试一下没有它:
def func(f):
return f(*args, **kwargs)
@func
def sum(a, b):
return a+b
print sum(5, 10)
代码失败。
那么存在三个问题:
- 为什么第二个示例不起作用?
- 如果我们使用嵌套函数,为什么 args,kwargs 会“神奇地”出现?
- 我该怎么做才能使第二个示例正常工作?当然,除了嵌套另一个函数。
-
为什么第二个示例不起作用?
因为您在返回时调用该函数,所以您没有返回函数。
-
如果我们使用嵌套函数,为什么 args,kwargs 会“神奇地”出现?
它们并不神奇地出现,我们正在声明它们,如下所示:
def deco(*args, **kwargs):
这些是通用的,并且将匹配任何函数签名(参数列表)。你不必打电话给他们args
and kwargs
,这只是一个约定,你可以称它们为sharon
and tracy
.
-
我该怎么做才能使第二个示例正常工作?当然,除了嵌套另一个函数。
好吧,你没有说出你期望第二个样本做什么。但我想把它变成一个装饰器:
def func(f):
return f
但这并没有做很多事情!
顺便说一句,覆盖现有的 Python 内置函数通常是一个坏主意(sum
) - 你必须有一个很好的理由。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)