博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

python functools 模块

Posted on 2017-06-29 17:34  bw_0927  阅读(121)  评论(0)    收藏  举报

http://www.cnblogs.com/my_life/articles/7095349.html

http://www.cnblogs.com/my_life/articles/5009959.html

http://www.cnblogs.com/my_life/articles/7094493.html

http://www.cnblogs.com/my_life/articles/5012612.html

 

http://www.cnblogs.com/Security-Darren/p/4168310.html

 

6.

 functools.wraps(wrapped[, assigned][, updated]) 

这个函数可以用作一个装饰器,简化调用上一个函数 update_wrapper 的过程。调用这个函数等价于调用  partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)  。

  例如:

复制代码
>>> from functools import wraps
>>> def my_decorator(f):
...     @wraps(f)
...     def wrapper(*args, **kwds):
...         print 'Calling decorated function'
...         return f(*args, **kwds)
...     return wrapper
...
>>> @my_decorator
... def example():
...     """Docstring"""
...     print 'Called example function'
...
>>> example()
Calling decorated function
Called example function
>>> example.__name__
'example'
>>> example.__doc__
'Docstring'
复制代码

 

可以看到最终调用的 example() 函数是经过 @my_decorator 装饰的,装饰器的作用是接受一个被包裹函数作为参数,对其进行加工,返回一个包裹函数。

代码使用 @functools.wraps 装饰将要返回的包裹函数 wrapper,使得他的 __name__, __doc__ 和 __module__ 属性与被装饰函数 examle()完全相同, 这样虽然最终调用的是经过装饰的 example() 函数,但是某些属性还是得到了维护。