functools模块中主要包含了一些函数装饰器和便捷的功能函数,关于装饰器的介绍可见这里。
wraps
1 | # encoding:utf8 |
输出结果:
1 | <function wrapper at 0x10c86b668> |
了解装饰器的应该都知道,test其实是指向wapper函数的指针,所以test.name输出是wapper, functools里面的wraps可以把原函数的元信息拷贝到装饰器里面的func函数中,示例如下:
1 | # encoding:utf8 |
输出结果:
1 | <function test at 0x10d6c4668> |
可以看到,test.__name__
已经发生了变化。@wraps接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等等的功能。这可以让我们在装饰器里面访问在装饰之前的函数的属性