python中wraps作用

functools.wraps 的作用是将原函数对象的指定属性复制给包装函数对象, 默认有 modulenamedoc,或者通过参数选择。

import functools

def itcast1(fun):

    # 带参数的装饰器

    #wraps是用来将inner函数的属性设置为fun的属性值

   @functools.wraps(fun)

    def inner(*args, **kwargs):

        print("itcast1 start")

        fun(*args, **kwargs)

        print("itcast1 end")

    return inner

上述代码可表示为:

# def itcast1(fun):

#     def inner(*args, **kwargs):

#        print("itcast1 start")

#        fun(*args, **kwargs)

#        print("itcast1 end")

#    inner.__name__ = fun.__name__

#    inner.__doc__ = fun.__doc__

#     return inner
>>> @itcast1
... def say_hello():
...     print('say_hello')
... 
>>> print(say_hello.__name__)
say_hello

若itcast1中没有使用wraps:

>>> def itcast1(fun):
...     def inner(*args, **kwargs):
...             print('itcast1 start')
...             fun(*args, **kwargs)
...             print("itcast1 end")
...     return inner
... 
>>> @itcast1
... def say_hello():
...     print('say_hello')
... 
>>> print(say_hello.__name__)
inner
>>> say_hello()
itcast1 start
say_hello
itcast1 end

猜你喜欢

转载自blog.csdn.net/fang_chuan/article/details/87797577
今日推荐