简述
装饰器的作用: 在不改变原有功能代码的基础上,添加额外的功能,如用户验证等。
@wraps(view_func)的作用: 不改变使用装饰器原有函数的结构(如name, doc)
实例
未使用@wraps()
def my_decorator(func):
def wrapper(*args, **kwargs):
'''decorator'''
print('Decorated function...')
return func(*args, **kwargs)
return wrapper
@my_decorator
def test():
"""Testword"""
print('Test function')
test()
print(test.__name__, test.__doc__)
输出:
'''
Decorated function...
Test function
wrapper decorator
'''
使用了@wraps()
from functools import wraps
def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
'''decorator'''
print('Decorated function...')
return func(*args, **kwargs)
return wrapper
@my_decorator
def test():
"""Testword"""
print('Test function')
test()
print(test.__name__, test.__doc__)
输出:
'''
Decorated function...
Test function
test Testword
'''
分析:
可以看到后边输出test.__name__与test.__doc__时,输出的是test的信息,这就是@wraps()的作用:不改变使用装饰器原有函数的结构.
__name__:输出函数的名字
__doc__:可以参看在下的上一篇(水文)blog