看到 fluent python 第 7 章例 7-15 中写道:
最开始实现的装饰器有几个缺点:不支持关键字参数,而且遮盖了被装饰函数的 name 和 doc 属性。
之后用 functools.wraps 解决。函数自身的属性好理解,但是为什么新版能够正确处理关键字参数呢?
附上前后两个装饰器代码 https://notepad.pw/code/c2cetz9um
1
wwqgtxx 2017-06-26 01:51:02 +08:00 via iPhone
因为他本身的实现类似于
def wraps(func): def _warps(_func): _func.__name__=func.__name__ _func.__doc__=func.__doc__ return _func return _warps |
2
wwqgtxx 2017-06-26 01:52:28 +08:00 via iPhone
重新排版一下
def wraps(func): ----def _warps(_func): --------_func.__name__=func.__name__ --------_func.__doc__=func.__doc__ --------return _func ----return _warps |
3
wwqgtxx 2017-06-26 01:58:33 +08:00 via iPhone
至于“装饰器不支持关键词参数”,好奇具体是怎么个不支持法,请说明具体的不支持的写法
|
5
HFcbyqP0iVO5KM05 2017-06-26 20:00:45 +08:00 via Android
楼主试试用 Pycharm 去 Ctrl + B 吧 😀
|
6
kkzxak47 2017-06-28 13:07:55 +08:00
"Sadly most decorators are broken because the web is full of bad advice."
https://hynek.me/articles/decorators/ |