python decorators, nested function
本问题已经有最佳答案,请猛点这里访问。
我想知道为什么在使用decorator时还需要一个嵌套函数。下面是一个例子:
1 2 3 4 5 6 7 8 9 10 | 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"函数呢?让我们试着不使用它:
1 2 3 4 5 6 7 8 | def func(f): return f(*args, **kwargs) @func def sum(a, b): return a+b print sum(5, 10) |
代码失败。
所以有三个问题:
为什么第二个样本不起作用?
因为您在返回时调用函数,所以不会返回函数。
如果我们使用嵌套函数,为什么args、kwargs会"神奇地"出现?
它们不会神奇地出现,我们要宣布它们,如:
1 | def deco(*args, **kwargs): |
这些是通用的,并且将匹配任何函数签名(参数列表)。你不必叫他们
我能做什么,使第二个样本工作?当然,除了嵌套另一个函数。
好吧,你不会说你希望第二个样本做什么。但是我想把它变成一个装饰师然后:
1 2 | def func(f): return f |
但那没什么用!
顺便说一句,重写现有的python内置(