2
我想弄清楚为什么我需要一个更多的嵌套函数,当使用装饰器。这里是一个例子:python装饰器,嵌套函数
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)
代码工程,一切都很好。但为什么我需要创建嵌套的“装饰”功能? 让我们试试没有它:
def func(f):
return f(*args, **kwargs)
@func
def sum(a, b):
return a+b
print sum(5, 10)
代码失败。
因此,有三个问题:
- 为什么第二个样本不工作?
- 如果我们使用嵌套函数,为什么args,kwargs会“神奇地”出现?
- 我能做些什么,使第二个样本工作?除了嵌套另一个功能,当然。
装饰者应该返回一个函数而不是函数的结果。在你的第一个例子中,它返回一个函数...在第二个例子中,它返回你函数f返回的任何东西。 –
那么第二个和第三个问题呢? – user
'* args'和'** kwargs'不会“神奇地”出现,只有在您调用装饰函数后才会定义参数(http://stackoverflow.com/questions/36901/what-does-double-star -and-star-do-for-python-parameters) –