关于python装饰器的问题?
假设有带参装饰器decorator(*args, **kwargs),使用该装饰器装饰函数func(*args2, **kwargs2):。@decorator(*args, **kwargs)
最新回答
1、假设有带参装饰器decorator(*args,**kwargs),使用该装饰器装饰函数func(*args2,**kwargs2):
@decorator(*args,**kwargs)
deffunc(*args2,**kwargs2):
...
实际上是以下写法的语法糖:
deffunc(*args2,**kwargs2):
...
func=decorator(*args,**kwargs)(func)
如你所见,调用decorator(*args,**kwargs)返回的是一个callable对象(通常是一个函数,该函数用作内层装饰器),然后进一步调用此callable对象并传递函数func作为参数,得到一个被装饰过后的函数func',令变量func重新指向这个函数func'。因此,这种带参的装饰器通常有三层,外层装饰器返回内层装饰器,内层装饰器返回装饰后的函数。
相关问题
关于python装饰器的问题
- 假设有带参装饰器decorator(*args,**kwargs),使用该装饰器装饰函数func(*args2,**kwargs2):
@decorator(*args,**kwargs)
deffunc(*args2,**kwargs2):
...
实际上是以下写法的语法糖:
deffunc(*args2,**kwargs2):
...
func=decorator(*args,**kwargs)(func)
如你所见,调用decorator(*args,**kwargs)返回的是一个callable对象(通常是一个函数,该函数用作内层装饰器),然后进一步调用此callable对象并传递函数func作为参数,得到一个被装饰过后的函数func',令变量func重新指向这个函数func'。因此,这种带参的装饰器通常有三层,外层装饰器返回内层装饰器,内层装饰器返回装饰后的函数。